Skip to content

Instantly share code, notes, and snippets.

@paveltretyakovru
Created July 13, 2016 16:06
Show Gist options
  • Save paveltretyakovru/9014175b889123eb32231113bb2eaaad to your computer and use it in GitHub Desktop.
Save paveltretyakovru/9014175b889123eb32231113bb2eaaad to your computer and use it in GitHub Desktop.
'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