在没有外部依赖的情况下,在 NPM 中发布 React 组件模块的正确方法是什么?

what is the proper way to publish a React component module in NPM without external dependencies inside?

我正在尝试在 NPM 中发布一个用 React 制作的组件库。

我不希望它具有外部依赖项,甚至是 React 模块,以具有尽可能小的文件大小,因为用户将在应用程序中添加此依赖项。

我正在使用 npmwebpack 来管理依赖项。

我把它发布到 NPM 并安装在另一个项目中。当我在导入 React 语句后尝试使用它时,它给我一个错误,指出 React 未定义(bundle.js:28448 Uncaught ReferenceError: React is not defined)

我是否遗漏了依赖项配置中的任何内容?

谢谢

您将输出文件设为 lib.js,但在渲染时您正在读取 bundle.js。请将输出文件重命名为 bundle.js 或在 index.html 中包含 lib.js 以代替包含 bundle.js.

Webpack externals 默认为您的 libraryTarget。这意味着如果你不指定任何东西,它会将外部输出为 var,并将其作为全局变量。

Webpack输出使用全局:

/* 76 */
/***/ function(module, exports) {

    module.exports = react;

/***/ },

您需要告诉它在已安装的模块中查找依赖项(对 require 它)。为此,请将您的外部设置更改为:

需要更改(webpack.config):

externals: {
  'react': 'commonjs react',
  'react-dom' : 'commonjs react-dom'
}

然后使用commonjs输出。

使用commonjs的Webpack输出:

/* 76 */
/***/ function(module, exports) {

    module.exports = require('react');

/***/ },

参考 webpack docs here.

请注意,我将您的外部变量改回小写,因为该值应该是要查找的依赖项名称(在这种情况下,reactreact-dom)。

(顺便说一句,如果你不想捆绑任何 node_module,我建议使用 webpack-node-externals

我写了一篇完整的 Medium 故事,因为我遇到了和你一样的问题,但没有相关信息。 检查一下:https://medium.com/@BrodaNoel/how-to-create-a-react-component-and-publish-it-in-npm-668ad7d363ce

主要修复是在 webpack.config.js 文件中添加外部 'react': 'commonjs react'