Как создать несколько путей вывода в конфигурации Webpack
кто-нибудь знает, как создать несколько путей выхода в webpack.конфиг.js файл? Я использую bootstrap-sass, который поставляется с несколькими различными файлами шрифтов и т. д. Для обработки webpack я включил file-loader, который работает правильно, однако файлы, которые он выводит, сохраняются в путь вывода, который я указал для остальных моих файлов:
output: {
path: __dirname + "/js",
filename: "scripts.min.js"
}
Я хотел бы достичь чего-то, где я могу, возможно, посмотреть на типы расширений для любого webpack выводит и для того, чтобы все закончилось .вофф .eot и т. д. перенаправляют их на другой выходной путь. Это возможно?
Я немного погуглил и наткнулся на эту * проблему на github, где предлагается несколько решений,edit:
но похоже, что вам нужно знать точку входа в состоянии указать выход с помощью хэш-метода
например:
var entryPointsPathPrefix = './src/javascripts/pages';
var WebpackConfig = {
entry : {
a: entryPointsPathPrefix + '/a.jsx',
b: entryPointsPathPrefix + '/b.jsx',
c: entryPointsPathPrefix + '/c.jsx',
d: entryPointsPathPrefix + '/d.jsx'
},
// send to distribution
output: {
path: './dist/js',
filename: '[name].js'
}
}
*https://github.com/webpack/webpack/issues/1189
однако в моем случай, Что касается файлов шрифтов, процесс ввода является своего рода абстрагированным, и все, что я знаю, это выход. в случае моих других файлов, подвергающихся преобразованиям, есть известный момент, когда я требую, чтобы они были обработаны моими загрузчиками. если бы был способ узнать, где происходит этот шаг, я мог бы использовать метод хэша для настройки путей вывода, но я не знаю, где эти файлы требуются.
6 ответов:
Я не уверен, что у нас есть такая же проблема, так как webpack поддерживает только один выход на конфигурацию по состоянию на июнь 2016 года. Я думаю, вы уже видели выпуск на Github.
но я отделяю выходной путь с помощью мульти-компилятор. (т. е. разделение объекта конфигурации
webpack.config.js).var config = { // TODO: Add common Configuration module: {}, }; var fooConfig = Object.assign({}, config, { name: "a", entry: "./a/app", output: { path: "./a", filename: "bundle.js" }, }); var barConfig = Object.assign({}, config,{ name: "b", entry: "./b/app", output: { path: "./b", filename: "bundle.js" }, }); // Return Array of Configurations module.exports = [ fooConfig, barConfig, ];если у вас есть общая конфигурация среди них, вы можете использовать расширения библиотека или
Object.assignв ES6 или{...}распространение оператор в ES7.
Webpack поддерживает несколько выходных путей.
установите выходные пути в качестве ключа ввода. И использовать
nameв шаблоне вывода.webpack config:
entry: { 'module/a/index': 'module/a/index.js', 'module/b/index': 'module/b/index.js', }, output: { path: path.resolve(__dirname, 'dist'), filename: '[name].js' }сгенерирована:
└── module ├── a │ └── index.js └── b └── index.js
Если вы можете жить с несколькими выходными путями, имеющими одинаковый уровень глубины и структуру папок, есть способ сделать это в webpack 2 (еще предстоит протестировать с webpack 1.x)
В основном вы не следуете правилам doc и предоставляете путь к имени файла.
module.exports = { entry: { foo: 'foo.js', bar: 'bar.js' }, output: { path: path.join(__dirname, 'components'), filename: '[name]/dist/[name].bundle.js', // Hacky way to force webpack to have multiple output folders vs multiple files per one path } };это займет эту структуру папок
/- foo.js bar.jsи превратить его в
/- foo.js bar.js components/foo/dist/foo.js components/bar/dist/bar.js
вы можете иметь только один путь выхода.
из документов https://github.com/webpack/docs/wiki/configuration#output
параметры, влияющие на выход компиляции. параметры вывода сообщают Webpack, как записать скомпилированные файлы на диск. Обратите внимание, что в то время как может быть несколько точек входа, указывается только одна выходная конфигурация.
Если вы используете любое хэширование ([хэш] или [chunkhash]), убедитесь, что у вас есть последовательный упорядочение модулей. Используйте OccurenceOrderPlugin или recordsPath.
Я написал плагин, который, надеюсь, может делать то, что вы хотите, вы можете указать известные или неизвестные точки входа (используя Глоб) и указать точные выходные данные или динамически генерировать их, используя путь к файлу ввода и имя. https://www.npmjs.com/package/webpack-entry-plus
Я на самом деле завелся просто идя в индекс.js в модуле загрузчика файлов и изменение того, куда было отправлено содержимое. Это, вероятно, не оптимальное решение, но пока нет другого способа, это нормально, так как я точно знаю, что обрабатывается этим загрузчиком, который просто шрифты.
//index.js var loaderUtils = require("loader-utils"); module.exports = function(content) { this.cacheable && this.cacheable(); if(!this.emitFile) throw new Error("emitFile is required from module system"); var query = loaderUtils.parseQuery(this.query); var url = loaderUtils.interpolateName(this, query.name || "[hash].[ext]", { context: query.context || this.options.context, content: content, regExp: query.regExp }); this.emitFile("fonts/"+ url, content);//changed path to emit contents to "fonts" folder rather than project root return "module.exports = __webpack_public_path__ + " + JSON.stringify( url) + ";"; } module.exports.raw = true;
Comments