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):

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 回答