我有一个React应用程序,我正在一个单独的库中构建React组件,以便它可以在其他应用程序中共享。由于React组件是私有的,它们通过git + ssh安装在NPM中,而不是作为NPM包安装在NPM中。
我的组件库具有以下结构:
-- components
---- component1.jsx
---- component2.jsx
---- index.js
-- package.json
库的package.json
文件基本上看起来像这样:
{
"name": "my-react-components",
"version": "1.0.0",
"description": "Collection of React components",
"main": "components/index.js",
"dependencies": {
...
}
}
components/index.js
文件看起来像这样
export * from './component1';
export * from './component2';
每个组件都是这样写的:
export const SomeComponent = () => { ... };
我的应用程序引用了这样的组件
import { SomeComponent } from 'my-react-components';
我的NPM依赖关系看起来像这样
"my-react-components": "git+ssh://{gitaddress}"
Here's my applications webpack config
由于我正在与我的应用程序一起开发这个库,我一直在使用库文件夹中的符号链接到应用程序的node_modules文件夹以允许引用。这一直在起作用,并且继续正常工作。
当我不使用符号链接而是使用NPM安装的版本时,babel或webpack或者拼图的某些部分突然停止构建我的组件库,而不是引用组件,我最终得到了{{我编译的包中的1}}标签。清理包并返回符号链接方法,一切正常。
Webpack没有显示任何错误,一切似乎都很好。我可以看到输出的差异,但是在符号链接方法中,我可以看到每个文件被写入包中:
export * from ...
当我不使用符号链接时,我只是看到类似
的内容[1] ./node_modules/my-react-components/components/component1.jsx
[2] ./node_modules/my-react-components/components/component1.jsx
// Something like that I just made that up,
// the point is I see the paths for components that are being referenced.
并且如前所述,该文件基本上是直接删除,没有babel,或检查导入或任何东西。
那么为什么在NPM安装的模块中会发生这种情况,而不是通过符号链接在完全相同的位置完全相同的文件呢?
只是要注意它们肯定是完全相同的文件,我在推送我的lib并且没有做任何更改之后立即完成了这个,删除了node_modules文件夹并重新安装,重新符号化等。这两种方法的区别在于每个方法都可以重现时间。