Есть ли способ получить выходные данные webpack, Node API, в виде строки?

#webpack

#webpack

Вопрос:

Может быть, есть свойство статистики или компилятора, которое содержит скомпилированный пакет?

 var compiler = require('webpack')({
    entry: entry_point,
    resolve: {
        modulesDirectories: modules,
        extensions: ['', '.js']
    },
    stats: {
        colors: true,
        progress: true,
        hash: true
    }
}, function(err, stats) {
   // compiler
   // stats

});
  

Ответ №1:

Должна быть возможность настроить компилятор на использование заменяемой файловой системы в памяти и получение выходных данных после завершения компиляции.

Вот пример compile() функции, которая возвращает обещание, которое разрешит содержимое выходного файла:

 const MemoryFs = require('memory-fs')
const webpack = require('webpack')

function compile () {
  const compiler = webpack({
    output: {
      filename: 'bundle.js',
      path: '/'
    }
  })

  compiler.outputFileSystem = new MemoryFs()

  return new Promise((resolve, reject) => {
    compiler.run((err, stats) => {
      if (err) return reject(err)

      if (stats.hasErrors() || stats.hasWarnings()) {
        return reject(new Error(stats.toString({
          errorDetails: true,
          warnings: true
        })))
      }

      const result = compiler.outputFileSystem.data['bundle.js'].toString()
      resolve({result, stats})
    })
  })
}
  

Комментарии:

1. Похоже, что в текущей версии memory-fs решение намного сложнее. Я изменил свой на форму const pathParts = compiler.outputFileSystem.pathToArray(__dirname).concat(["dist", "main.js"]); const file = _.get(compiler.outputFileSystem.data, pathParts).toString();