mic*_*kov 6 symlink node.js npm webpack npm-install
我有这三个地方的NPM包:C:\projects\A,C:\projects\B和C:\projects\main.Main是使用Webpack构建的React应用程序.Main依赖于A和B,也A要看B.我们有自己的"全局"包管理器,可以保证包位于同一个父文件夹中.
我想适合这些:
Node(和webpack)require将解析本地包
我不需要npm install在Main我每次更改A或B
我是这样做Main的package.json:
....
"dependencies": {
"A": "file:../A",
"B": "file:../B",
"react": ...
.........
Run Code Online (Sandbox Code Playgroud)
但遇到了一个奇怪的问题:npm没有在A's和B's node_modules中安装所有软件包,所以Webpack构建失败了.我需要npm install每次都跑步.
我用google搜索并找到了linklocal,它将所有本地包替换为符号链接.但遇到了另一个问题:
linklocal不会安装链接依赖项的依赖项,因此您通常最终会安装两次链接依赖项的依赖项:一次在npm安装期间,然后再次在linklocal之后
所以我跑了linklocal然后npm install再用postinstall脚本.但是npm @ 3对符号链接文件夹没有任何作用:
npm WARN update-linked node_modules/A needs updating to 1.0.0 from 1.0.0 but we can't, as it's a symlink
Run Code Online (Sandbox Code Playgroud)
然后我决定修改postinstall去每个符号链接的模块并npm install从那里运行.它一见倾心:安装运行良好,以及webpack bunding.但Webpack开始捆绑两份React(禁止使用).
如何正确配置我的包?
您可以npm link在本地使用来维护本地开发版本的符号链接。
因此,将package.jsonin重置Main为指向已发布的包实际存在的位置:
"dependencies": {
"A": "<PUBLISHED_PACKAGE_REPO>",
"B": "<PUBLISHED_PACKAGE_LOCATION>",
"react": ...
Run Code Online (Sandbox Code Playgroud)
这可以确保您的项目始终构建在 CI/其他机器等上。
然后,导航到“项目 A”目录并创建一个链接:
cd projects\A
npm link
Run Code Online (Sandbox Code Playgroud)
这将创建一个指向 的 npm 特定符号链接C:\projects\A。
然后对B项目做同样的事情:
cd projects\B
npm link
Run Code Online (Sandbox Code Playgroud)
您现在已经创建了两个项目链接,只需将它们实际链接到您的Main项目即可:
cd projects\Main
npm link A
npm link B
Run Code Online (Sandbox Code Playgroud)
如果A还取决于B您也只需要链接这些项目:
cd projects\A
npm link B
Run Code Online (Sandbox Code Playgroud)
当您完成开发并想要使用package.json取消链接和安装中指定的任何内容时:
cd projects\Main
npm unlink A
npm unlink B
npm install
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
359 次 |
| 最近记录: |