我发现在移动文件并且需要不断地重写文件包含路径以使其相对于新的文件夹位置是一件麻烦的事情。
我希望在我的browserify代码中避免这种情况:
var View = require('../../../../base/view');
我希望你能做更符合 RequireJS 的事情,它知道我的基础路径是 js
:
var View = require('base/view');
我发现在移动文件并且需要不断地重写文件包含路径以使其相对于新的文件夹位置是一件麻烦的事情。
我希望在我的browserify代码中避免这种情况:
var View = require('../../../../base/view');
我希望你能做更符合 RequireJS 的事情,它知道我的基础路径是 js
:
var View = require('base/view');
paths
选项。这个选项在browserify文档中没有记录,但是在node-browser-resolve中有记录(在底层使用):paths - 如果在常规的node_modules递归查找中未找到任何内容,则使用require.paths数组
aliasify
插件,可以在 这里 找到。然后只需向您的 package.json
添加类似以下内容的信息,其中 aliasify 配置中的所有路径都相对于该文件的位置:
"browserify": {
"transform": [
"aliasify"
]
},
"aliasify": {
"aliases": {
"app": "./src/app",
"components": "./src/components",
"someAlias": "./src/app/some/path/to/a/place",
"foobar": "./go/to/a/module/named/foobar",
}
}
var foobar = require("foobar");
var sampleComponent = require("components/someSample");
//My JS code
node_modules
你可以将应用程序代码(或符号链接,如果您的平台支持)放在 node_modules
目录下。例如:
node_modules/
+-- app/
+-- js/
+-- base/
+-- view.js
+-- a/
+-- b/
+-- c/
+-- somefile.js
// somefile.js
require("app/js/base/view");
然而,这里有一个重要的警告:这会破坏通过API程序化指定的转换的应用,例如:
browserify('app/entry.js')
.transform(es6ify)
var View = require('base/view');
你可以这样做:
var pathmodify = require('pathmodify');
var opts = {mods: [
// Maps require() IDs beginning with "base/" to begin with
// "/somedir/js/base/"
pathmodify.mod.dir("base", "/somedir/js/base"),
]};
// Give browserify the real path to entry file(s).
// pathmodify will transform paths in require() calls.
browserify('./js/entry')
.plugin(pathmodify, opts)
.transform(es6ify)
.bundle()
...
请注意,路径修改只能解决browserify的问题。如果您需要像base/view
这样的路径在其他上下文中(如node)也起作用,则如果您有符号链接,则可以将两者结合使用。例如,将node_modules/base
符号链接到/somedir/js/base
,并像指示的那样配置pathmodify,继续将browserify指向node_modules
之外的路径以获取入口文件。
opts.basedir
的选项,我理解它可以做到你想要的:opts.basedir是browserify从中开始捆绑以.开头的文件的目录
但是,我自己无法让它工作(使用gulp-browserify
)。 - eightyfivebasedir
不能解决问题。opts.paths
是@Abadaba正在寻找的。我在这里用更多的细节回答了自己的问题:https://dev59.com/QGEh5IYBdhLWcg3waC5t#22601755 - eightyfive