我正在开发Express应用。该代码使用ES6 import语句,因此需要由Babel在ES5代码中进行编译,以便可以与Node一起运行。 ES6源代码存储在我的src
目录中,编译后的代码存储在我的dest
目录中。
我希望我可以运行一个npm命令,该命令将监视src
目录中的所有更改,将项目转换为dest
,然后重新启动Express应用程序。
到目前为止,以下是我的解决方案(我运行npm run server:watch
)。每当我的chokidar-cli
目录中的任何js文件发生更改时,它都使用server:build
执行server:run
和src
脚本。这非常有效,除了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或任何其他模块捆绑器在此处不合适)
答案 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中使用\"
进行转义。