我是node.js中的新手 在我的项目中,我使用PM2重新启动node.js,它工作正常。
但是,我需要查看文件夹以进行更改,启动脚本并在退出后不重新启动它。
为简单起见,我使用yml作为I18n。 我的目标,当我在yml文件中进行更改时,运行脚本将其转换为json,这就是全部。 等到yml文件中的新更改。
PM2有效,但每次尝试后都会重复尝试重新启动脚本 退出。
PM2 |已经退出了具有id [1]和pid [28803]的App [i18n compile] 使用代码[0]通过信号[SIGINT] PM2 |脚本 /home/.../src/i18n/convert.js有太多不稳定 重启(16)。停止。 “差错”
可能我应该使用其他工具解决这个问题吗?
答案 0 :(得分:0)
nodemon
是一个工具,可以让您对目录中的文件进行更改并自动运行脚本
nodemon可以通过npm install -g nodemon
nodemon script.js
或node script.js
所在目录中的任何其他文件发生更改时,执行script.js
会自动运行script.js
答案 1 :(得分:0)
我提醒自己住在异步环境中:
{
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);
});
});
}