我的项目设置如下:
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文件夹吗?
4条答案
按热度按时间fgw7neuy1#
Gulp要求你同时有一个全局安装和一个本地安装。所以你需要有一个相对于你的Gulpfile的Gulp。如果你的
package.json
位于workspace
,你的node_modules
位于workspace/node_modules
,由于Node的搜索树,一切都会很好地工作,但是如果你不能移动它们,使其工作的唯一方法是“伪造”node_modules
文件夹。您可以通过创建符号链接来完成此操作。
以下是Unix/Linux/Mac上的示例:
这是Windows上的
(the后一个可能会有不同的工作方式,我没有使用Win计算机)
qzwqbdag2#
您也可以尝试pkglink
从描述:
节省空间的Node.js软件包硬链接器。pkglink从node_modules目录中查找常用的JavaScript/Node.js软件包,并硬链接软件包文件,以便它们共享磁盘空间。
5q4ezhmt3#
编辑:ddprt
在Windows上
szqfcxe24#
您总是可以在npm install 'package-name'中使用'-g'参数,以便使该模块可以在不同的项目中全局访问。
请参阅以下链接
软件包会被放到前缀为的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中。