我是节点的新手,我想使用节点在命令行中循环执行命令。命令如下:
node dist/main.js dist/index.html dynamic /
node dist/main.js dist/index.html dynamic page.html
node dist/main.js dist/index.html dynamic page2.html
我正在使用angular4 universal并重新呈现我的页面,我必须将这些命令放在命令提示符中。如果我已经没有20页,还有更多的页面,那就没问题了。我的手疼得很疼......
我该怎么做?
非常感谢!
main.js文件
import 'zone.js/dist/zone-node';
import { renderModuleFactory } from '@angular/platform-server'
import { enableProdMode } from '@angular/core'
import { AppServerModuleNgFactory } from './src/app.server.module.ngfactory'
import * as fs from 'fs';
import * as path from 'path';
enableProdMode();
const args = process.argv.slice(2);
if (args.length != 3) {
process.stdout.write("Usage: node dist/main.js <document> <distDir> <url>\n");
process.exit();
}
const indexFileContent = fs.readFileSync(args[0], 'utf8');
renderModuleFactory(AppServerModuleNgFactory, {
document: indexFileContent,
url: args[2]
}).then(string => {
let destUrl = args[2];
if (destUrl == '/')
destUrl = 'index.html'
const targetDir = args[1] + '/' + destUrl;
targetDir.split('/').forEach((dir, index, splits) => {
if (index !== splits.length - 1) {
const parent = splits.slice(0, index).join('/');
const dirPath = path.resolve(parent, dir);
if (!fs.existsSync(dirPath)) {
fs.mkdirSync(dirPath);
}
}
});
fs.writeFileSync(targetDir, string);
console.log(targetDir);
});
答案 0 :(得分:1)
我有两种方式可以让我知道,只使用节点(你可以选择使用bash,python脚本)
我假设我们可以先编辑main.js(稍后用childExec版本更新)。
注意:我删除了代码中不相关的部分,专注于循环遍历文件名数组
用
运行node dist / main.js dist / index.html dynamic
主js
const args = process.argv.slice(2);
//if (args.length != 3) {
// process.stdout.write("Usage: node dist/main.js <document> <distDir> <url>\n");
// process.exit();
//}
var arr = ['page.html', 'page2.html'] //etc
arr.forEach(function(file) {
renderModuleFactory(AppServerModuleNgFactory, {
document: indexFileContent,
url: file // -> this is what we need to change page.html
}).then(string => {
let destUrl = file; // -> page.html
if (destUrl == '/')
destUrl = 'index.html'
const targetDir = args[1] + '/' + destUrl;
targetDir.split('/').forEach((dir, index, splits) => {
if (index !== splits.length - 1) {
const parent = splits.slice(0, index).join('/');
const dirPath = path.resolve(parent, dir);
if (!fs.existsSync(dirPath)) {
fs.mkdirSync(dirPath);
}
}
});
fs.writeFileSync(targetDir, string);
console.log(targetDir);
});
});
<强>阐释:强>
脚本使用格式node dist/main.js <document> <distDir> <url>
来呈现文件,因为我们正在使用声明的arg[2]/<url>
数组中的文件数组删除arr
。这样就无需手动输入所需的文件。