我的项目设置如下:
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文件夹?
答案 0 :(得分:6)
Gulp要求您同时拥有全局安装和本地安装。所以你需要将Gulp相对于你的Gulpfile。如果您的package.json
位于workspace
且node_modules
位于workspace/node_modules
,那么一切都会因为Node的搜索树而正常运行,但如果可以&# 39;移动它们,唯一能让它发挥作用的方法就是“假装”#34; node_modules
文件夹。
您可以通过创建符号链接来完成此操作。
在Unix / Linux / Mac上:
ln -s ../cache/node_modules node_modules
Windows上的
mklink /D node_modules ../cache/node_modules
(后者可能有所不同,我不在Win机器上)
答案 1 :(得分:0)
你也可以试试pkglink
来自描述:
<块引用>节省空间的 Node.js 包硬链接器。 pkglink 从您的 node_modules 目录中定位常见的 JavaScript/Node.js 包并硬链接包文件,以便它们共享磁盘空间。
答案 2 :(得分:-1)
你总是可以使用&#39; -g&#39;参数与npm install&#39; package-name&#39;,以便使模块可以全局访问不同的项目。
请参阅以下链接
将包放入前缀下的node_modules文件夹中。当本地安装,这意味着,可以要求(&#34;包名&#34),以加载其主模块,或者需要(&#34;包名/ LIB /路径/到/子/模块&#34;)加载其他模块。
Unix系统上的全局安装转到{prefix} / lib / node_modules。 Windows上的全局安装转到{prefix} / node_modules(即没有 lib文件夹。)
Scoped软件包以相同的方式安装,除非它们已分组 一起在相关node_modules文件夹的子文件夹中 @符号的范围前缀的名称,例如npm安装 @ myorg / package会将包放入 {前缀} / node_modules / @ MYORG /包。