你能集中node_modules文件夹吗?
我有很多项目都遵循特定的文件夹结构和约定。
我不想复制整个项目,而只想为每个项目configuration一个configuration对象,每个项目链接到全局框架。
我已经有configuration被传递到每个项目的index.js,但是当我从每个项目中删除node_modules文件夹,它不再工作。
例:
/gulp-framework tasks/ index.js package.json node_modules/ /project-a gulpfile.js configuration.js /project-b gulpfile.js configuration.js
所以使用上述结构,理想的方法是运行:
cd /project-a && gulp
然而,这显然回报
Cannot find module 'gulp', please try npm install gulp
所以我的问题是,是否有一种方法仍然在项目内的gulpfile,但node_modulespath设置为全局node_modules文件夹?
你有两个select:
-
从全局模块加载 。 例如在Linux / Mac上,你可以像这样设置
NODE_PATH
variables:export NODE_PATH="/path/to/gulp-framework/node_modules"
不是真的推荐,但是因为这使得很难推断你的模块的位置。 你也必须在你想build立你的项目的每台机器上设置环境variables(虽然你可以写一个shell脚本包装器)。
-
build立一个
project-a
和project-b
的gulp-framework
子目录。如果在当前目录中找不到模块,节点将遍历所有寻找
node_modules
文件夹的父目录 ,因此您的项目可能会从gulp-frameworks
文件夹中“inheritance”模块。 -
对于Windows,更新
NODE_PATH
variables。下面更新全局的node_pathvariables,当你最初运行gulp时,所有的节点进程已经被实例化了,所以我们再次运行_initPaths()方法,以便它重新使用更新后的node_pathvariables:
process.env.NODE_PATH = "..gulp/node_modules"; require("module").Module._initPaths();
注意:进程在第一个require方法之前覆盖HAS 。
完成此操作后,您现在可以在指定的自定义node_path内部需要gulp框架:
exports.framework = require('../gulp')(require('gulp'), paramsOrOptions);
里面
../gulp/
我们有index.js
:module.exports = function(gulp, paramsOrOptions) { // setup your gulp framework starting here. }