2016-07-10 2 views
3

Мне нужно полное руководство или хороший справочный материал для решения команд исполняемого модуля в файле javascript.Как использовать скрипты npm в javascript

Скажи, что я часто работают:

$ npm run webpack-dev-server --progress --colors -- files 

Как я могу запустить этот внутри файла JavaScript и выполнить с

$ node ./script.js 

script.js

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

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

ответ

4

Ответ

я сделать что-то подобное для моих 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!'); 
}); 

You can handle all of the events you like. Это довольно мощный модуль, который позволяет просматривать процесс 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'); 
     }); 
    }); 
} 

Используя этот метод, вы можете включить ваш script.js в других файлах и сделать этот код синхронно в вашей системе сборки или любой другой. Возможности безграничны!


Editchild_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); 
}); 
+0

, это потрясающе, так или иначе я могу сделать это без появления? – user2167582

+0

@ user2167582 Да! Вы можете использовать 'child_process.exec', чтобы увидеть мое редактирование. –

0

ли вам нужен ли он webpack-dev-server? Существует эквивалент WebPack-DEV-промежуточного слоя для работы в узле/экспресс:

'use strict'; 
let express = require('express'); 
let app = new express(); 

app.use(express.static(`${__dirname}/public`)); 

let webpackMiddleware = require('webpack-dev-middleware'); 
let webpack = require('webpack'); 
let webpackConfig = require('./webpack.config.js'); 
app.use(webpackMiddleware(webpack(webpackConfig), {})); 

app.listen(3000,() => console.log(`Server running on port 3000...`)); 

https://github.com/webpack/webpack-dev-middleware

+0

проблема им пытаются решить не столько с WebPack но способ запуска НПМ модули внутри файлов JavaScript , так что я могу вызывать составленные макрокоманды через узел ./myscript.js – user2167582