你能集中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:

  1. 从全局模块加载 。 例如在Linux / Mac上,你可以像这样设置NODE_PATHvariables:

     export NODE_PATH="/path/to/gulp-framework/node_modules" 

    不是真的推荐,但是因为这使得很难推断你的模块的位置。 你也必须在你想build立你的项目的每台机器上设置环境variables(虽然你可以写一个shell脚本包装器)。

  2. build立一个project-aproject-bgulp-framework子目录。

    如果在当前目录中找不到模块,节点将遍历所有寻找node_modules文件夹的父目录 ,因此您的项目可能会从gulp-frameworks文件夹中“inheritance”模块。

  3. 对于Windows,更新NODE_PATHvariables。

    下面更新全局的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. }