Gulp 是否可以在项目之间共享node_modules目录

mm9b1k5b  于 2022-12-08  发布在  Gulp
关注(0)|答案(4)|浏览(183)

我的项目设置如下:

workspace
└cache
  └node_modules
    └gulp (and gulp-plugins, express etc.)
└nodejs
  └node.exe
└project1
  └gulpfile.js
└project2
  └gulpfile.js

现在我想执行项目目录中的gulpfile:

set NODE_PATH='C:\workspace\cache\node_modules\'
cd C:\workspace\project1\
C:\workspace\nodejs\node.exe C:\workspace\cache\node_modules\gulp\bin\gulp.js watch

得到以下输出:

[12:06:04] Local gulp not found in C:\workspace\project1
[12:06:04] Try running: npm install gulp

在两个项目文件夹中,gulpfile是相似的,并且使用了一组相似的插件。我真的希望只拥有一次依赖项(因为可能有多达25个项目共享相同的node_modules)。这种设置是可行的吗?或者单独的项目目录需要有自己的node_modules文件夹吗?

fgw7neuy

fgw7neuy1#

Gulp要求你同时有一个全局安装和一个本地安装。所以你需要有一个相对于你的Gulpfile的Gulp。如果你的package.json位于workspace,你的node_modules位于workspace/node_modules,由于Node的搜索树,一切都会很好地工作,但是如果你不能移动它们,使其工作的唯一方法是“伪造”node_modules文件夹。
您可以通过创建符号链接来完成此操作。
以下是Unix/Linux/Mac上的示例:

ln -s ../cache/node_modules node_modules

这是Windows上的

mklink /D node_modules ../cache/node_modules

(the后一个可能会有不同的工作方式,我没有使用Win计算机)

qzwqbdag

qzwqbdag2#

您也可以尝试pkglink
从描述:
节省空间的Node.js软件包硬链接器。pkglink从node_modules目录中查找常用的JavaScript/Node.js软件包,并硬链接软件包文件,以便它们共享磁盘空间。

5q4ezhmt

5q4ezhmt3#

编辑:ddprt
在Windows上

mklink /D node_modules "C:/fullPATH/cache/node_modules"
szqfcxe2

szqfcxe24#

您总是可以在npm install 'package-name'中使用'-g'参数,以便使该模块可以在不同的项目中全局访问。
请参阅以下链接

  1. what does the "-g" flag do in the command "npm install -g "?
  2. How do I install a module globally using npm?
  3. https://docs.npmjs.com/files/folders
    软件包会被放到前缀为的node_modules文件夹中。当在本地安装时,这意味着你可以要求(“packagename”)来加载它的主模块,或者要求(“packagename/lib/path/to/sub/module”)来加载其他模块。
    Unix系统上的全局安装转到{prefix}/lib/node_modules。Windows上的全局安装转到{prefix}/node_modules(即没有lib文件夹)。
    作用域包的安装方式是相同的,除了它们被分组在相关node_modules文件夹的子文件夹中,作用域的名称前缀是@符号,例如npm install @myorg/package将把包放在{prefix}/node_modules/@myorg/package中。

相关问题