在我的项目中,我使用PM2重新启动node.js,它工作得很好。
但是,我需要观察文件夹的变化,启动脚本,而不是在退出后重新启动它。
为了简单起见,我对i18n使用yml。我的目标是,当我在yml文件中进行更改时,运行脚本将其转换为json,仅此而已。等待yml文件中的新更改。
PM2可以工作,但它在每次退出后一次又一次地尝试重新启动脚本。
id为[1]且pid为[28803]的PM2应用程序[i18n compile]通过信号[SIGINT]PM2脚本/HOME/.../SRC/i18n/convert.js退出,代码为[0]。停止了。“错误”
也许我应该用另一个工具来解决这个问题?
nodemon
是一个工具,允许您对目录中的文件进行更改并自动运行脚本
nodemon可以通过npm安装-g nodemon
安装
当对script.js
或对与script.js
相同目录中的任何其他文件进行更改时,执行nodemon script.js
将自动运行node script.js
我提醒自己,生活在异步环境中:
{
name : 'I18n compiler',
interpreter : 'babel-node',
script : 'tools/locales.watcher.js',
cwd : path.root,
watch : 'tools/locales.watcher.js',
ignore_watch : ['config', 'src', 'server', 'package.json'],
env: {
NODE_PATH: path.src,
NODE_ENV: 'development'
},
}
import fs from 'fs';
import config from '../config/general';
import convert from 'i18n/convert.js';
const { path } = config;
// Synchronous recursively list files in a directory
function getFilesRecur(dir, filelist) {
const files = fs.readdirSync(dir);
filelist = filelist || [];
files.forEach(function(file) {
if (fs.statSync(path.join(dir, file)).isDirectory()) {
filelist = getFilesRecur(path.join(dir, file), filelist);
} else if ((/\.(yml|yaml)$/i).test(file)) {
filelist.push(path.join(dir, file));
}
});
return filelist;
}
export default function setupLocalesWatcher(){
const files = getFilesRecur(path.i18n);
files.forEach(function(file) {
console.log(`Watching: ${file}`);
fs.watchFile(file, () => {
convert(file);
});
});
}