转换ES6并在文件更改后启动Express应用

时间:2018-09-11 05:08:19

标签: node.js npm build npm-scripts chokidar

我正在开发Express应用。该代码使用ES6 import语句,因此需要由Babel在ES5代码中进行编译,以便可以与Node一起运行。 ES6源代码存储在我的src目录中,编译后的代码存储在我的dest目录中。

我希望我可以运行一个npm命令,该命令将监视src目录中的所有更改,将项目转换为dest,然后重新启动Express应用程序。

到目前为止,以下是我的解决方案(我运行npm run server:watch)。每当我的chokidar-cli目录中的任何js文件发生更改时,它都使用server:build执行server:runsrc脚本。这非常有效,除了Express应用程序在再次重新编译代码时不会消失之外,因此当我尝试再次运行server: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或任何其他模块捆绑器在此处不合适)

1 个答案:

答案 0 :(得分:0)

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

您需要启动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中使用\"进行转义。