2

ファイルを除外しようとすると、Watchify で問題が発生します ( Browserify のように)。

このコマンドの使用:

watchify scripts/main.js -o scripts/main.bundle.js -t strictify -v -x scripts/libs.js

最初は正常にコンパイルされますが、監視対象のファイルを更新するとエラーが発生します。これは完全な出力です:

1036 bytes written to scripts/main.bundle.js (0.04 seconds)

fs.js:430
  binding.open(pathModule._makeLong(path),
          ^
TypeError: path must be a string
    at Object.fs.open (fs.js:430:11)
    at OpenReq.process (/usr/lib/node_modules/watchify/node_modules/chokidar/node_modules/readdirp/node_modules/graceful-fs/graceful-fs.js:55:16)
    at OpenReq.Req (/usr/lib/node_modules/watchify/node_modules/chokidar/node_modules/readdirp/node_modules/graceful-fs/graceful-fs.js:126:8)
    at new OpenReq (/usr/lib/node_modules/watchify/node_modules/chokidar/node_modules/readdirp/node_modules/graceful-fs/graceful-fs.js:49:7)
    at Object.open (/usr/lib/node_modules/watchify/node_modules/chokidar/node_modules/readdirp/node_modules/graceful-fs/graceful-fs.js:41:3)
    at ReadStream.open (fs.js:1509:6)
    at new ReadStream (fs.js:1496:10)
    at Object.fs.createReadStream (fs.js:1450:10)
    at Deps.readFile (/usr/lib/node_modules/watchify/node_modules/browserify/node_modules/module-deps/index.js:190:17)
    at /usr/lib/node_modules/watchify/node_modules/browserify/node_modules/module-deps/index.js:365:14

これは既知の問題で、回避策はありますか? 今のところ、-x scripts/libs.js本番用に (ファイルを除外するために) 編集して通常の Browserify ビルドを実行できますが、開発用には Watchify タスクが少し遅くなります。

助けてくれてありがとう!

4

1 に答える 1

0

回避策は、Watchify を完全にスキップし、nodemon を使用して監視を処理することでした。これは、開発および本番ビルドに使用される完全な package.json です。

{
    "private": true,
    "devDependencies": {
        "node-sass": "latest",
        "autoprefixer": "latest",
        "browserify": "latest",
        "strictify": "latest",
        "uglify-js": "latest",
        "nodemon": "latest"
    },
    "scripts": {
        "build:main:bundle": "browserify scripts/main.js -o scripts/main.bundle.js -x ./scripts/libs.js -t strictify",
        "build:main:uglify": "uglifyjs scripts/main.bundle.js -c -o scripts/main.bundle.js",
        "build:main": "npm run build:main:bundle && npm run build:main:uglify",
        "build:libs:bundle": "browserify -r ./scripts/libs.js -o scripts/libs.bundle.js -t strictify",
        "build:libs:uglify": "uglifyjs scripts/libs.bundle.js -c -o scripts/libs.bundle.js",
        "build:libs": "npm run build:libs:bundle && npm run build:libs:uglify",
        "build:styles": "node-sass --stdout --output-style compressed styles/styles.scss | autoprefixer -o styles/styles.css",
        "build": "npm run build:main && npm run build:libs && npm run build:styles",
        "watch:main": "nodemon -e js -w scripts -i scripts/main.bundle.js -x 'npm run build:main:bundle'",
        "watch:styles": "nodemon -e scss -w styles -x 'npm run build:styles'",
        "watch": "npm run watch:main & npm run watch:styles"
    }
}

これにより、開発 (watch を使用) と本番 (build を使用) に次の 2 つのコマンドを使用できます。

npm run watch
npm run build

唯一の注意点は、マニュアルを作成することです

npm run build:libs

scripts/libs.js ファイルを更新するたびに (jQuery/Backbone/TweenLite などのファイルが含まれているため、頻繁に更新する必要はありません)。完全な例については、Weblateを参照してください。

解決策を見つけるのを手伝ってくれたNPM for Everythingに感謝します...それがWatchifyの問題を直接解決しないとしても...

于 2015-05-03T00:46:31.050 に答える