通过命令行窗口

时间:2017-04-24 07:09:59

标签: node.js

我是节点的新手,我想使用节点在命令行中循环执行命令。命令如下:

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);
});

此代码来自博客:"Angular v4 Universal Demystified"

1 个答案:

答案 0 :(得分:1)

我有两种方式可以让我知道,只使用节点(你可以选择使用bash,python脚本)

  1. 编辑main.js
  2. 创建一个使用childExec
  3. 的单独script.js

    我假设我们可以先编辑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。这样就无需手动输入所需的文件。