Grunt Browserify – 设置包含,备用path

有没有办法为Browserify创buildGrunt任务来使用回退path? 例如。

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 ,但它只能检查一个特定的目录。 而且我不想改变模块内部的requirepath,一切都应该通过Grunt完成。

我想重写一些应用程序(dir2),所以我想获取(复制到dir1)只有我需要更改的模块,并将所有其他人保留在应用程序目录中。

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

我知道现在有点老了,但最好能有一个答案。

所以,前几天我问自己一个非常类似的问题,最终做了你想做的事情。

使用来自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是在查找未使用相对path引用的模块时浏览查找的目录数组。 可以是绝对的或相对于basedir。 调用browserify命令时,设置NODE_PATH环境variables的等价物。 – Browserify

从理论上讲,它应该遵循这些path,唯一的问题就是在查找那些path之前,它会查看本地节点模块(util,fs等)。

这句话是说,如果你这样做:

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

Browserify将在相对path之后查找模块。 当你删除相对path时:

 var myModule = require("myModule"); 

它可以search选项中的确定path。

编辑

我testing了这个,它按预期工作。 我有一个叫做myModule.js的模块,位于“./current/directory”,我也有一个名为myModule.js的模块,位于“./modules/directory”。 另外,在当前目录中,我有“src.js”需要模块: require("myModule"); 。 它通过path顺序查找,第一个发现是在这种情况下注入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" } } }, });