"错误:路径必须是字符串" (v5.10.0)

时间:2014-09-01 13:03:05

标签: javascript node.js browserify

我有这个文件(一大堆几个JS文件),曾经使用过browserify(5.10.0 )直到几天前,现在它没有。

这就是我正在运行的:

$ browserify index.js -o dist/out.bundle.js

输出是:

Error: path must be a string
at /usr/local/lib/node_modules/browserify/node_modules/resolve/lib/async.js:15:16
at process._tickCallback (node.js:419:13)

任何人都知道这会导致什么?有没有办法我可以调试这个来试图弄清楚浏览器化了什么?

干杯

3 个答案:

答案 0 :(得分:4)

也许你的package.json配置有问题,特别注意换行!〜

"browserify": {
    "transform": [
        [
            "reactify", {
                "harmony": "true"
            }
        ]
    ]
  }

答案 1 :(得分:2)

可悲的是,错误消息不是很有用,但是发生了什么:

Browserify使用resolve模块查找应加载的require个调用文件。不知何故,它不是像往常一样传递路径,而是获得了其他东西(即不是字符串)。

理论上这几乎可以是任何东西,但我猜测它是undefined或者某个非常荒谬的价值,如对象或函数。基本上任何理论上都可以传递给require并导致垃圾的东西。

您没有说明您是否更新了模块,添加了新的转换或修改了任何代码。正如您所暗示的那样,这与您现在使用的浏览器版本完全一致,我会想出一个问题,那就是变换失误或代码中的错误。

尝试在您最近修改过的代码中查找所有require次调用(自上次已知的良好版本以来)。如果你使用源代码控制(我在开玩笑的人:我在考虑git),这应该是相当微不足道的。如果您不使用源代码管理,则应该使用源代码管理。

如果您发现任何新的require调用将字符串以外的内容传递给require(例如多个参数甚至变量),您可能已经找到了罪魁祸首。

如果这没有帮助,请查看是否有任何转换可能会在require次调用中被调整。这几乎可以说是一切。

如果这也没有任何好处,请尝试将所有内容更新到最新版本。除了可能导致问题,如果您使用任何东西的真正过时的版本,它可能会解决您的问题。如果您想避免兼容性问题,请尝试更新到最新的次要版本(对于版本> = 1.0)或bugfix版本(对于版本< 1.0)。

如果仍然没有帮助,请发布更多详细信息,并确保您了解有效代码与前几天之间的确切差异"以及你现在拥有的代码。

答案 2 :(得分:0)

您可能忘记使用npm安装转换包。例如,如果您使用browserify使用babelify转换,您可能会忘记安装babelify。