npm 使用project_name/node_modules作为符号链接?

oyxsuwqo  于 2023-11-18  发布在  其他
关注(0)|答案(3)|浏览(149)

标签:single node_modules folder for multiple projects
如果不推荐npm install -g所有内容,并且我不想链接单个模块,那么我是否可以将<some project>/node_modules符号链接到一个公共目录,以便由多个项目共享?

13z8s7eq

13z8s7eq1#

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

字符串
这种结构的工作方式可能与您预期的一样,子项目中的文件可以require()自己的模块和superproject/node_modules中的任何模块,但它们不会轻易require()兄弟子项目中的模块(仍然可以通过显式路径来实现)。换句话说,client.js可以require() browserify和socket.io而无需路径,但它需要使用require() express的路径。
其中一个重要的方面是,npm会“查找"package.json,并在安装时将node_modules目录中的模块作为该文件的兄弟文件进行处理。这意味着您当前的工作目录需要是superproject才能在其中安装模块,除非您的子项目没有package.json文件。

ki0zmccv

ki0zmccv2#

在npm >= 7.21.0中,你不能。当你执行npm install时,npm会删除一个名为node_modules的符号链接。我使用yarn作为解决方案,它可以很好地处理一个符号链接的node_modules文件夹。

i5desfxk

i5desfxk3#

我也注意到npm在node_modules中删除了我的symlinked。我有很多网站是用node构建的,这在写入磁盘方面是不切实际和浪费的。所以我走极端,开始制作一个tmpfs挂载点,并将该目录绑定挂载到我的项目中。但这似乎浪费了带宽,所以我决定将一个分区挂载到/node_modules,并将其绑定挂载到各个项目:

# extreme do not touch the disk mode:
#tmpfs  /node_modules   tmpfs   noatime,nodev,nosuid,size=1400M 0   0
#
UUID="3848672deadbeef" /node_modules xfs rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 0
/node_modules /mnt/example_sites/gatsby-theme-example/node_modules  none bind 0 0
/node_modules /mnt/example_sites/example.com/node_modules           none bind 0 0
/node_modules /mnt/example_sites/lovely_chickpea/node_modules       none bind 0 0

字符串
需要注意的是,我经常会清除node_modules目录,通常是在家里有足够带宽的时候。当我开始在一个项目中工作时,我总是执行npm i。我不会同时在多个项目中工作,如果另一个项目的另一个npm在其他地方运行另一个会话时更改了某个项目的版本,我会遇到问题。

相关问题