为节点运行的节点项目创建引导程序脚本



我正在制作一个脚本来引导我的所有项目,因此项目创建就像运行'node-bootstrap.js'一样简单,该脚本初始化目录,创建基本的项目文件夹结构,安装依赖项(如:nodemon、dotenv、jest等(,并在package.json内配置脚本,例如">nodemon-r dotenv/config index.js",用于使用dotenv预加载启动nodemon。当我启动脚本时,我创建文件夹结构,然后在每个文件夹中创建示例文件,最后执行脚本的以下部分:

// Lets add the scripts inside package.json
addScriptsToPackageJson = () => {
const packageJsonFilename = './package.json';
let packageJson = JSON.parse(fs.readFileSync(packageJsonFilename, 'utf8'));
packageJson.scripts['test'] = 'jest --coverage';
packageJson.scripts['dev'] = 'nodemon -r dotenv/config index.js';
fs.writeFile(packageJsonFilename, JSON.stringify(packageJson, null, 2), function writeJSON(err) {
if (err) return console.log(err);
console.log(JSON.stringify(packageJson));
console.log('writing to ' + packageJsonFilename);
});
}
// Promisify exec command
function execShellCommand(cmd) {
const exec = require('child_process').exec;
return new Promise((resolve, reject) => {
exec(cmd, (error, stdout, stderr) => {
if (error) {
console.warn(error);
}
resolve(stdout? stdout : stderr);
});
});
}
// Initialize project and download base dependencies
execShellCommand('npm init -y')
.then(response => execShellCommand('npm install --save-dev nodemon dotenv jest'))
.then(response => execShellCommand('npm install express'))
.then(addScriptsToPackageJson())
.catch(error => {console.log("ALGO SALIO MAL")});

但是函数addScriptsToPackageJson抛出以下错误:

internal/fs/utils.js:220
throw err;
^
Error: ENOENT: no such file or directory, open './package.json'
at Object.openSync (fs.js:440:3)
at Object.readFileSync (fs.js:342:35)
at addScriptsToPackageJson (F:Repositoriesnode-project-bootstraperpruebabootstrap.js:94:37)
at Object.<anonymous> (F:Repositoriesnode-project-bootstraperpruebabootstrap.js:109:11)
at Module._compile (internal/modules/cjs/loader.js:955:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
at Module.load (internal/modules/cjs/loader.js:811:32)
at Function.Module._load (internal/modules/cjs/loader.js:723:14)
at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
at internal/main/run_main_module.js:17:11 {
errno: -4058,
syscall: 'open',
code: 'ENOENT',
path: './package.json'
}

我认为这是因为在编译时,文件package.json不存在,它只是在'npm-init-y'命令完成执行后才存在。

关于如何解决这个问题有什么想法吗?我真的很想制作一个脚本,在没有用户干预的情况下制作一切。

您过早地调用了函数。代替

.then(addScriptsToPackageJson())

进行

.then(addScriptsToPackageJson)

最新更新