LoginSignup
3
0

More than 5 years have passed since last update.

browserify で `TypeError: Path must be a string.` というエラーが出る

Last updated at Posted at 2017-05-01

表題のエラーで 15分くらい悩んで色々と検索したけど適切な解決策がヒットしなかったので、しょーもない内容ですが書き残しておきます。

結論

  • browserifytransform の指定に誤りがある
  • babelify を使用してトランスパイルする場合は以下のように記述する
package.json
{
  "browserify": {
    "transform": [
      [
        "babelify",
        {
          "presets": [
            "es2015",
            "es2016"
          ]
        }
      ]
    ]
  }
}

現象と原因

browserifyrequire を解決してファイル結合を試みたところ、以下のようなエラーが出ました。

~/Repository/my-project $ npm run build:browserify

> my-project@1.0.0 build:browserify /Users/kimurakazunori/Repository/my-project
> browserify "src/index.js" > "public/bundle.js" --debug

TypeError: Path must be a string.
    at resolve (/Users/kimurakazunori/Repository/my-project/node_modules/resolve/lib/async.js:15:19)
    at nr (/Users/kimurakazunori/Repository/my-project/node_modules/module-deps/index.js:282:24)
    at /Users/kimurakazunori/Repository/my-project/node_modules/resolve/lib/async.js:17:13
    at _combinedTickCallback (internal/process/next_tick.js:73:7)
    at process._tickCallback (internal/process/next_tick.js:104:9)
# 以下略

Path must be a string. ということなので browserify に渡した src/index.jspublic/bundle.js が悪いのか?と思って色々調べたんですがそんなところが問題ではなく、package.json に追記していた browserifytransform の指定に誤りがあったことが原因でした。

transform の指定、本来は配列が2重になっていないといけないのに、一個抜けてただけでした。


設定ファイルが増えるのが嫌なので package.jsonbrowserify の設定も書いてしまうんですが、babelifypresets を指定する際の object や array の書き方が直感的ではないので間違いやすいです。

面倒でも babelify の設定は .babelrc に、transform の指定は -t オプションでやってあげる方が記載自体がシンプルになり、間違いを回避出来る気がします。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0