标签:single node_modules folder for multiple projects
如果不推荐npm install -g
所有内容,并且我不想链接单个模块,那么我是否可以将<some project>/node_modules
符号链接到一个公共目录,以便由多个项目共享?
标签:single node_modules folder for multiple projects
如果不推荐npm install -g
所有内容,并且我不想链接单个模块,那么我是否可以将<some project>/node_modules
符号链接到一个公共目录,以便由多个项目共享?
3条答案
按热度按时间13z8s7eq1#
Node可以很好地处理符号链接。如何实现这一点取决于你的一些目标。最重要的是:你希望其他从版本控制下载你的项目的开发人员拥有什么样的经验?
在设计这种体验时,阅读Node模块加载算法是非常有帮助的,可以深入了解什么是可能的。
一般来说,我的建议是不要担心项目之间的重复依赖关系。“修复”这个不值得维护成本,这包括依赖关系僵局(子项目的冲突需求),并且在某些情况下需要定制工具来解释您的定制结构。
最简单的方法是创建一个超级项目,它封装了各种子项目。子项目将有效地继承超级项目的依赖项。
字符串
这种结构的工作方式可能与您预期的一样,子项目中的文件可以
require()
自己的模块和superproject/node_modules
中的任何模块,但它们不会轻易require()
兄弟子项目中的模块(仍然可以通过显式路径来实现)。换句话说,client.js可以require()
browserify和socket.io而无需路径,但它需要使用require()
express的路径。其中一个重要的方面是,
npm
会“查找"package.json,并在安装时将node_modules
目录中的模块作为该文件的兄弟文件进行处理。这意味着您当前的工作目录需要是superproject
才能在其中安装模块,除非您的子项目没有package.json
文件。ki0zmccv2#
在npm >= 7.21.0中,你不能。当你执行
npm install
时,npm会删除一个名为node_modules的符号链接。我使用yarn作为解决方案,它可以很好地处理一个符号链接的node_modules文件夹。i5desfxk3#
我也注意到npm在node_modules中删除了我的symlinked。我有很多网站是用node构建的,这在写入磁盘方面是不切实际和浪费的。所以我走极端,开始制作一个tmpfs挂载点,并将该目录绑定挂载到我的项目中。但这似乎浪费了带宽,所以我决定将一个分区挂载到/node_modules,并将其绑定挂载到各个项目:
字符串
需要注意的是,我经常会清除node_modules目录,通常是在家里有足够带宽的时候。当我开始在一个项目中工作时,我总是执行
npm i
。我不会同时在多个项目中工作,如果另一个项目的另一个npm在其他地方运行另一个会话时更改了某个项目的版本,我会遇到问题。