2

我正在开发一个 Express 应用程序。代码使用 ES6 import 语句,所以需要通过 Babel 在 ES5 代码中进行转译,以便在 Node.js 中运行。ES6源代码存放在我的src目录下,编译后的代码存放在我的dest目录下。

我想要一个我可以运行的 npm 命令,它将监视我的src目录中的任何更改,将项目转换为dest,然后重新启动 Express 应用程序。

以下是我到目前为止的解决方案(我运行npm run server:watch)。每当我的目录中的任何 js 文件发生更改时,它都会用于chokidar-cli执行server:build和脚本。除了再次编译代码时 Express 应用程序不会死机之外,这非常有效,因此当我再次尝试运行时出现“正在使用的端口”异常。server:runsrcserver:watch

// package.json
"scripts": {
  "server:clean": "rm -f dist/*",
  "server:build": "npm run server:clean && ./node_modules/.bin/babel  ./src --experimental --source-maps-inline -d ./dist",
  "server:run": "nodemon dist/app.js --watch",
  "server:watch": "chokidar 'src/*.js' -c 'npm run server:build && npm run server:run'"
}

我在正确的轨道上吗?这类问题的最佳解决方案是什么?

(为了澄清,我说的是转译服务器端代码,所以 webpack 或任何其他模块捆绑器在这里都不合适)

4

1 回答 1

0

nodemon正在监视您的 dist 文件,并且永远不会终止。使用您的监视脚本,每次有文件更改时,您都会启动第二个实例,因此会出现“正在使用的端口”错误。nodemon

您需要启动nodemon一次,并在监视脚本运行时继续在后台运行。使用https://github.com/mysticatea/npm-run-all最容易做到这一点。

通过运行安装它:

npm install npm-run-all --save-dev

在命令行上。

然后您将脚本编辑为:

// package.json
"scripts": {
  "server:clean": "rm -f dist/*",
  "server:build": "npm run server:clean && ./node_modules/.bin/babel  ./src --experimental --source-maps-inline -d ./dist",
  "server:run": "nodemon dist/app.js --watch",
  "server:watch": "chokidar 'src/*.js' -c 'npm run server:build'",
  "server:dev": "run-p server:run server:watch"
}

然后,您只需npm run server:dev在命令行上运行以通过 启动服务器nodemon,并启动监视/重建过程,所有这些都在一个命令中。


旁注:如果您在 Windows 上开发,您将无法在脚本中使用单引号,您必须使用双引号,并\"在 JSON 中转义。

于 2018-09-29T14:46:58.000 回答