有没有办法为 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 。
答案 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" }
}
},
});