Javascript Get browserify要求路径的行为更像requirejs

Javascript Get browserify要求路径的行为更像requirejs,javascript,node.js,requirejs,commonjs,browserify,Javascript,Node.js,Requirejs,Commonjs,Browserify,我发现移动文件和不断重写文件包含路径以相对于新文件夹时会很痛苦 我想在我的browserify代码中避免这种情况: var View=require('../../../../../base/View'); 并根据requirejs做更多的事情,它知道我的基本路径是js: var-View=require('base/View'); 您应该使用路径选项。未在browserify中记录,但在(发动机罩下使用)中记录: paths-如果在正常路径上找不到任何内容,则需要使用.paths数组 节点u

我发现移动文件和不断重写文件包含路径以相对于新文件夹时会很痛苦

我想在我的browserify代码中避免这种情况:

var View=require('../../../../../base/View');
并根据requirejs做更多的事情,它知道我的基本路径是
js

var-View=require('base/View');

您应该使用
路径
选项。未在browserify中记录,但在(发动机罩下使用)中记录:

paths-如果在正常路径上找不到任何内容,则需要使用.paths数组 节点u模递归遍历

node\u模块
您可以将应用程序代码(或其符号链接,如果您的平台支持)放在
node\u modules
下。例如:

node_modules/
+-- app/
    +-- js/
        +-- base/
            +-- view.js
        +-- a/
            +-- b/
                +-- c/
                    +-- somefile.js
//somefile.js
要求(“app/js/base/view”);
然而有一个重要的警告:这会中断通过API编程指定的转换应用程序,例如:

browserify('app/entry.js')
  .transform(es6ify)
在browserify中,有一个“顶级”文件的概念,它与转换一起使用。browserify文档中对该概念以及转换的一般行为解释得很差。您可以在此处看到有关该问题的一些讨论:

路径修改 另一个选项是我的browserify插件。这允许使用非相对路径和编程转换。要启用浏览代码,请执行以下操作:

var-View=require('base/View');
您可以执行以下操作:

var pathmodify=require('pathmodify');
var opts={mods:[
//映射需要以“base/”开头的()ID
//“/somedir/js/base/”
pathmodify.mod.dir(“base”,“/somedir/js/base”),
]};
//给browserify条目文件的实际路径。
//pathmodify将在require()调用中转换路径。
browserify(“./js/entry”)
.plugin(路径修改,选项)
.transform(es6ify)
.bundle()
...
合二为一
请注意,pathmodify只会解决browserify的问题。如果您需要像
base/view
这样的路径也在另一个上下文中工作,比如node,那么如果您有可用的符号链接,您可以将两者结合起来。例如,将
node\u modules/base
符号链接到
/somedir/js/base
,并按照指示配置pathmodify,并继续将浏览指向
node\u modules
之外的路径以获取条目文件。

这里的一个好选项是使用可用的
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

在这里有一个名为
opts.basedir
的选项,我知道它正在做你想要的事情:
opts.basedir是browserify开始绑定文件名的目录。
但是,我自己无法让它工作(使用
gulp browserify
)@8y5这是第一个js文件,对吗?不是整个js树。所以这似乎并不能解决问题problem@SebastienLorber实际上,
basedir
并不能解决问题<代码>选择路径是@Abadaba所寻找的。我在这里详细回答了自己的问题:以及如何做到这一点: