2016-05-19 37 views
1

我有很多项目都遵循特定的文件夹结构和约定。你可以集中node_modules文件夹吗?

而不是复制整个项目,我想只是为每个项目和每个项目链接到全球框架的配置对象。

我已经将配置传递给每个项目的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_modules路径被设置为全局节点_modules文件夹?

回答

1

你有两个选择:

  1. Loading from global modules。因为这使得它很难理了解您的模块位于

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

    不是真的不过建议:例如在Linux/Mac上你可以设置NODE_PATH变量这样。你也必须在你想建立你的项目的每台机器上设置环境变量(尽管你可以为它写一个shell脚本包装器)。

  2. 制作一个project-aproject-b子目录gulp-framework

    节点traverses all parent directories寻找node_modules文件夹,如果在当前目录中找不到模块,那么您的项目可能会从gulp-frameworks文件夹中“继承”模块。

  3. 对于Windows,更新gulpfile.js中的NODE_PATH变量。下面

    更新全局NODE_PATH变量,当您最初运行一饮而尽,所有节点的流程已经被实例化,所以我们再次运行_initPaths()方法,让它重新使用更新后的NODE_PATH变量:

    process.env.NODE_PATH = "..gulp/node_modules"; 
    require("module").Module._initPaths(); 
    

    注意:进程覆盖HAS要包含在第一个require方法之前。

    后,这项工作已经完成,现在可以要求指定的自定义NODE_PATH内吞气框架:

    exports.framework = require('../gulp')(require('gulp'), paramsOrOptions);

    ../gulp/我们有index.js

    module.exports = function(gulp, paramsOrOptions) { 
        // setup your gulp framework starting here. 
    } 
    
+0

谢谢这个伴侣,我最终选择了这个解决方案,它和你的第一个解决方案几乎一样,但是对于风ows,我会编辑你的问题,如果这很酷。 –

相关问题