pru*_*wan 2 symlink npm node-modules
如果npm install -g
不推荐所有内容,并且我不想链接单个模块,我是否可以符号链接<some project>/node_modules
到由多个项目共享的公共目录?
在 npm >= 7.21.0 中你不能。当你这样做时,npm 将删除一个名为 node_modules 的符号链接npm install
。我使用yarn作为解决方法,它可以很好地处理符号链接的node_modules文件夹。
Node 可以完美地处理符号链接。如何实现这一点将取决于您的一些目标。最重要的是:对于从版本控制下载您的项目的其他开发人员,您希望有什么经验?
在设计此体验时,阅读有关 Node 模块加载算法的信息非常有帮助,可以深入了解可能的情况。
一般来说,我的建议是不要关心项目之间的重复依赖。“修复”这不值得维护成本,其中包括依赖关系僵局(子项目的需求冲突)以及在某些情况下需要自定义工具来解决您的自定义结构。
有了这个警告,我们该怎么做呢?最简单的方法是创建一个封装了各种子项目的超级项目。子项目将有效地继承超级项目的依赖项。
superproject/
|-- node_modules/
| +-- socket.io/
|-- package.json
|-- subprojectA/
| |-- node_modules/
| | +-- browserify/
| |-- package.json
| +-- app/
| +-- client.js
+-- subprojectB/
|-- node_modules/
| +-- express/
|-- package.json
+-- lib/
+-- server.js
Run Code Online (Sandbox Code Playgroud)
这种结构的工作你怎么可能指望,子项目可以在文件require()
自己的模块和任何那些的superproject/node_modules
,但他们不会轻易require()
他们的兄弟姐妹子项目中的模块(仍然可以通过显式路径这样做)。换句话说,client.js 可以在require()
没有路径的情况下进行 browserify 和 socket.io,但是它需要使用路径来require()
表达。
这样做的一个重要方面是npm
“查找”搜索 package.json 并node_modules
在安装时将目录中的模块作为该文件的同级处理等。这意味着您当前的工作目录需要是superproject
为了在其中安装模块,除非您的子项目没有package.json
文件。
归档时间: |
|
查看次数: |
7660 次 |
最近记录: |