如何在javascript中使用npm脚本

use*_*582 8 javascript terminal node.js npm

我需要一个完整的指南或一个很好的参考资料来解决javascript文件问题中的运行模块命令.

说我经常跑:

$ npm run webpack-dev-server --progress --colors -- files
Run Code Online (Sandbox Code Playgroud)

如何在javascript文件中运行并执行

$ node ./script.js
Run Code Online (Sandbox Code Playgroud)

的script.js

var webpackDevServer = require('webpack-dev-server');

// need help here
var result = webpackDevServer.execute({
  progress: true,
  colors: true,
}, files);
Run Code Online (Sandbox Code Playgroud)

Ken*_*den 13

回答

我为我的Webpack包做了类似的事情.您只需使用child_process.spawn执行命令行程序并在节点脚本中处理该过程.

这是一个例子:

var spawn = require('child_process').spawn

// ...

// Notice how your arguments are in an array of strings
var child = spawn('./node_modules/.bin/webpack-dev-server', [
    '--progress',
    '--colors',
    '<YOUR ENTRY FILE>'
]);

child.stdout.on('data', function (data) {
    process.stdout.write(data);
});

child.stderr.on('data', function (data) {
    process.stdout.write(data);
});

child.on('exit', function (data) {
    process.stdout.write('I\'m done!');
});
Run Code Online (Sandbox Code Playgroud)

您可以处理您喜欢的所有活动.这是一个相当强大的模块,允许您查看进程'PID(child.pid),甚至在您选择(child.kill())时终止进程.


附录

一个巧妙的诀窍是把所有东西扔进去Promise.这是我的版本的简化示例script.js:

module.exports = function () {
    return new Promise(function (resolve, reject) {
        var child = spawn('./node_modules/.bin/webpack', [
            '-d'
        ]);

        child.stdout.on('data', function (data) {
            process.stdout.write(data);
        });

        child.on('error', function (data) {
            reject('Webpack errored!');
        });

        child.on('exit', function () {
            resolve('Webpack completed successfully');
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

使用此方法,您可以将其包含script.js在其他文件中,并使此代码在构建系统中同步.可能性是无止境!


编辑child_process.exec,您还可以执行的命令行程序:

var exec = require('child_process').exec

// ...

var child = exec('webpack-dev-server --progress --colors <YOUR ENTRY FILES>',
  function(err, stdout, stderr) {
    if (err) throw err;
    else console.log(stdout);
});
Run Code Online (Sandbox Code Playgroud)