Grunt Browserify - 设置包含,后备路径

时间:2015-01-26 09:43:44

标签: javascript node.js gruntjs browserify commonjs

有没有办法为 Browserify 创建 Grunt 任务以使用后备路径? 例如。

require('./module.js)

检查module.js是否在当前目录中,如果没有,请检查其他目录吗?

    project1
     |- dir1
         |- mod1.js - has: require('./mod2.js')
         |- bundle.js - has: require('./mod1.js') and require('./mod2.js')
    project2
     |- dir2
         |- mod1.js 
         |- mod2.js

我已经尝试了 remapify ,但它只能检查一个特定目录。 而且我不想更改模块内部的需求路径,一切都应该通过Grunt完成。

我想覆盖一些app(dir2),所以我想获取(复制到dir1)只需要更改的模块,并将所有其他模块保留在app目录中。

Gruntfile位于project1。模块 CommonJS 。我正在使用 grunt-browserify

1 个答案:

答案 0 :(得分:2)

我知道现在有点老了但是回答会很好。

所以,我几天前问自己一个非常相似的问题,结果基本上做了你想做的事情。

使用grunt-browserify中的browserifyOptions,如:

// Using grunt-browserify
grunt.loadNpmTasks("grunt-browserify");

grunt.initConfig({
  browserify : {
    options : {
      browserifyOptions : {
        // keep in mind that paths are relative to Gruntfile.js
        paths: ["./first/path", "./second/path", "./and/so/on"]
      }
    },
    dist : {
      files: { "./path/to/dist.js" : "./path/to/src.js" }
    }
  },
});

现在你可以做到:

var myModule = require("myModule"); 
  

opts.paths是一个浏览化搜索时间的目录数组   寻找未使用相对路径引用的模块。能够   是绝对的或相对于basedir。相当于设置NODE_PATH   调用browserify命令时的环境变量。 - Browserify

理论上,它应该按顺序遵循路径,我唯一的问题是它在查找这些路径之前通过本机节点模块(util,fs等)查找。

引用的内容是:如果你这样做:

var myModule = require("./myModule"); 

Browserify将根据相对路径查找模块。删除相对路径时:

var myModule = require("myModule");

它可以搜索选项中的已建立路径。

修改

我对此进行了测试,它按预期工作。我有一个名为myModule.js的模块位于" ./ current / directory"中,我还有一个名为myModule.js的模块位于" ./ modules / directory"中。另外,在当前目录中,我有" src.js"这需要模块:require("myModule");。它按顺序查看路径,第一个找到的是在这种情况下注入bundle.js的那个。

grunt.initConfig({
  browserify : {

    dist : {
      options : {
        browserifyOptions : {
          // keep in mind that paths are relative to Gruntfile.js
          paths: ["./current/directory", "./modules/directory"]
        }
      },
      files: { "./current/directory/bundle.js" : "./current/directory/src.js" }
    }
  },
});