Created
July 13, 2016 16:06
-
-
Save paveltretyakovru/9014175b889123eb32231113bb2eaaad to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
/** | |
* | |
* # Запуск сборки в продакшн | |
* $ NODE_ENV=production webpack | |
* | |
* # Создать файл stats.json для анализа на http://webpack.github.io/analyse | |
* $ webpack --json --profile > stats.json | |
* | |
* # Детальное отображение используемых модулей | |
* $ webpack --display-modules -v | |
* | |
* # Детальное отображене с времением компиляции | |
* $ webpack --profile --display-modules --display-reasons | |
*/ | |
var webpack = require('webpack'); | |
// Тип сборки | |
const NODE_ENV = process.env.NODE_ENV || 'development'; | |
// Костанты для указания их в плагине | |
const lang = JSON.stringify("ru"), | |
node_env = JSON.stringify(NODE_ENV); | |
module.exports = { | |
// Каталог контекста | |
context: __dirname + '/sources/js', | |
// Входные файлы | |
entry: { | |
entry: './entry', | |
common: './common', | |
shifter: './shifter', | |
// Не забывать об ошибке точки входа | |
// welcome: './welcome', | |
}, | |
// Выходные файлы | |
output: { | |
path: __dirname + '/public/javascripts', | |
library: "[name]", | |
filename: '[name].js', | |
}, | |
// Карта скриптов | |
devtool: NODE_ENV == 'development' ? 'cheap-inline-module-source-map' : null, | |
// Отслеживание изменений | |
watch: NODE_ENV == 'development', | |
watchOptions: {aggregateTimeout: 100,}, | |
// Подключаем дополнительные плагины | |
plugins: [ | |
new webpack.DefinePlugin({ LANG: lang, NODE_ENV: node_env,}), | |
new webpack.EnvironmentPlugin(['USER']), | |
// Подключение постоянных плагинов используя свободные переменные (pluck(....)) | |
new webpack.ProvidePlugin({ | |
pluck: 'lodash/collection/pluck', | |
}), | |
// Не компилить файлы при ошибках | |
new webpack.NoErrorsPlugin(), | |
// Создает скрипт, содержащий модули, которые испол-ся во всех точках входа | |
// примеры использования => https://goo.gl/WE1eCH | |
new webpack.optimize.CommonsChunkPlugin({ | |
name: 'common', | |
// Мин. количество раз когда используется плагин, тогда записыватется | |
// minChunks: 2, | |
// Из каких модулый точно выносить подключения | |
chunks: ['shifter'] | |
}), | |
// Можно повоторно использовать плагин для других целей | |
// new webpack.optimize.CommonsChunkPlugin({name: 'common-other',chunks: ['other-entry']}), | |
], | |
// Параметры поиска плагинов | |
resolve: { | |
extensions: ['' , '.js'], | |
modulesDirectories: ['node_modules'], | |
}, | |
resolveLoader: { | |
extensions: ['', '.js'], | |
moduleTemplates: ['*-loader', '*'], | |
modulesDirectories: ['node_modules'], | |
}, | |
// Объявление дополнительных модулей | |
module: { | |
loaders: [{ | |
test: /\.js$/, | |
loader: 'babel', | |
// Пропускаем через Babel только наши модули | |
include: __dirname + '/sources/js', | |
// exclude: /\/node_modules\//, | |
// noParse: ['angular'], | |
noParse: /\/node_modules\/(angular\/angular|jquery)/, | |
}], | |
}, | |
// CDN библиотеки!!! | |
externals: { | |
lodash: "_", | |
} | |
} | |
// Минимизируем скрипты если запускается прадакшн кампиляция | |
if (NODE_ENV == 'production') { | |
module.exports.plugins.push( | |
new webpack.optimize.UglifyJsPlugin({ | |
compress: { | |
unsafe: true, | |
warnings: false, | |
drop_console: true, | |
} | |
}) | |
); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment