|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 255 B |
|
After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 877 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 221 B |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 450 B |
@ -1,111 +1,132 @@ |
||||
const webpack = require('webpack'); |
||||
const path = require('path'); |
||||
const glob = require('glob').sync; |
||||
const NODE_ENV = process.env.NODE_ENV || 'development'; |
||||
const ExtractTextPlugin = require("extract-text-webpack-plugin"); |
||||
const SpriteLoaderPlugin = require('svg-sprite-loader/plugin'); |
||||
|
||||
module.exports = { |
||||
entry: { |
||||
app: "./src/js/app.js", |
||||
courseRedactor: "./src/js/course-redactor.js", |
||||
mixpanel: "./src/js/third_party/mixpanel-2-latest.js" |
||||
}, |
||||
output: { |
||||
path: path.join(__dirname, "build"), |
||||
filename: NODE_ENV === 'development' ? '[name].js' : '[name].js', |
||||
library: '[name]', |
||||
//filename: NODE_ENV === 'development' ? '[name].js' : '[name].[id].[chunkhash].js',
|
||||
//library: '[name]',
|
||||
publicPath: '/static/', |
||||
}, |
||||
module: { |
||||
loaders: [ |
||||
{ |
||||
test: /\.js$/, |
||||
exclude: /(node_modules|bower_components|third_party)/, |
||||
use: { |
||||
loader: 'babel-loader', |
||||
options: { |
||||
"presets": ["es2015"], |
||||
} |
||||
} |
||||
}, |
||||
{ |
||||
test: /third_party\/.*\.js$/, |
||||
exclude: /(node_modules|bower_components)/, |
||||
use: { |
||||
loader: 'file-loader', |
||||
options: { |
||||
name: "[name].[ext]" |
||||
} |
||||
} |
||||
}, |
||||
{ |
||||
test: /\.css$/, |
||||
use: ExtractTextPlugin.extract({ |
||||
fallback: 'style-loader', |
||||
use: ['css-loader'] |
||||
}) |
||||
}, |
||||
{ |
||||
test: /\.s[ac]ss$/, |
||||
use: ExtractTextPlugin.extract({ |
||||
fallback: 'style-loader', |
||||
use: ['css-loader', 'sass-loader'] |
||||
}) |
||||
}, |
||||
{ |
||||
test: /\.vue$/, |
||||
loader: 'vue-loader', |
||||
exclude: [/node_modules/], |
||||
options: { |
||||
loaders: { |
||||
js: 'babel-loader?presets[]=es2015', |
||||
css: 'vue-style-loader!css-loader', |
||||
scss: 'vue-style-loader!css-loader!sass-loader', |
||||
sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax' |
||||
} |
||||
} |
||||
}, |
||||
{ |
||||
test: /\.(png|gif|jpg|woff|woff2|eot|ttf|svg)$/, |
||||
loader: 'url-loader?limit=100000' |
||||
} |
||||
] |
||||
}, |
||||
plugins: [ |
||||
new webpack.DefinePlugin({ |
||||
'process.env': { |
||||
'NODE_ENV': JSON.stringify(NODE_ENV) |
||||
} |
||||
}), |
||||
new webpack.ProvidePlugin({ |
||||
$: "jquery", |
||||
jQuery: "jquery", |
||||
"window.jQuery": "jquery" |
||||
}), |
||||
new ExtractTextPlugin('[name].css'), |
||||
], |
||||
|
||||
resolve: { |
||||
alias: { |
||||
vue: 'vue/dist/vue.js' |
||||
entry: { |
||||
app: "./src/js/app.js", |
||||
courseRedactor: "./src/js/course-redactor.js", |
||||
mixpanel: "./src/js/third_party/mixpanel-2-latest.js", |
||||
sprite: glob('./src/icons/*.svg'), |
||||
images: glob('./src/img/*'), |
||||
fonts: glob('./src/fonts/*') |
||||
}, |
||||
output: { |
||||
path: path.join(__dirname, "build"), |
||||
filename: NODE_ENV === 'development' ? '[name].js' : '[name].js', |
||||
library: '[name]', |
||||
//filename: NODE_ENV === 'development' ? '[name].js' : '[name].[id].[chunkhash].js',
|
||||
//library: '[name]',
|
||||
publicPath: '/static/', |
||||
}, |
||||
module: { |
||||
loaders: [ |
||||
{ |
||||
test: /\.js$/, |
||||
exclude: /(node_modules|bower_components|third_party)/, |
||||
use: { |
||||
loader: 'babel-loader', |
||||
options: { |
||||
"presets": ["es2015"], |
||||
} |
||||
} |
||||
}, |
||||
{ |
||||
test: /third_party\/.*\.js$/, |
||||
exclude: /(node_modules|bower_components)/, |
||||
use: { |
||||
loader: 'file-loader', |
||||
options: { |
||||
name: "[name].[ext]" |
||||
} |
||||
} |
||||
}, |
||||
{ |
||||
test: /\.css$/, |
||||
use: ExtractTextPlugin.extract({ |
||||
fallback: 'style-loader', |
||||
use: ['css-loader'] |
||||
}) |
||||
}, |
||||
{ |
||||
test: /\.s[ac]ss$/, |
||||
use: ExtractTextPlugin.extract({ |
||||
fallback: 'style-loader', |
||||
use: ['css-loader', 'sass-loader'] |
||||
}) |
||||
}, |
||||
{ |
||||
test: /\.vue$/, |
||||
loader: 'vue-loader', |
||||
exclude: [/node_modules/], |
||||
options: { |
||||
loaders: { |
||||
js: 'babel-loader?presets[]=es2015', |
||||
css: 'vue-style-loader!css-loader', |
||||
scss: 'vue-style-loader!css-loader!sass-loader', |
||||
sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax' |
||||
} |
||||
} |
||||
}, |
||||
{ |
||||
test: /\.svg$/, |
||||
loader: 'svg-sprite-loader', |
||||
include: path.resolve(__dirname, 'src/icons'), |
||||
options: { |
||||
extract: true, |
||||
symbolId: 'icon-[name]', |
||||
spriteFilename: 'img/sprite.svg' |
||||
}, |
||||
extensions: ['*', '.js', '.vue'] |
||||
}, |
||||
{ |
||||
test: /\.(png|gif|jpg|svg)$/, |
||||
exclude: path.resolve(__dirname, 'src/icons'), |
||||
loader: 'file-loader?name=[name].[ext]&outputPath=./img/' |
||||
}, |
||||
{ |
||||
test: /\.(ttf|otf|eot|woff(2)?)(\?[a-z0-9]+)?$/, |
||||
loader: 'file-loader?name=[name].[ext]' |
||||
} |
||||
] |
||||
}, |
||||
plugins: [ |
||||
new SpriteLoaderPlugin({ plainSprite: true }), |
||||
new webpack.DefinePlugin({ |
||||
'process.env': { |
||||
'NODE_ENV': JSON.stringify(NODE_ENV) |
||||
} |
||||
}), |
||||
new webpack.ProvidePlugin({ |
||||
$: "jquery", |
||||
jQuery: "jquery", |
||||
"window.jQuery": "jquery" |
||||
}), |
||||
new ExtractTextPlugin('[name].css'), |
||||
], |
||||
|
||||
resolve: { |
||||
alias: { |
||||
vue: 'vue/dist/vue.js' |
||||
}, |
||||
extensions: ['*', '.js', '.vue'] |
||||
}, |
||||
|
||||
watch: NODE_ENV === 'development', |
||||
watch: NODE_ENV === 'development', |
||||
|
||||
devtool: NODE_ENV === 'development' ? 'source-map' : false |
||||
devtool: NODE_ENV === 'development' ? 'source-map' : false |
||||
}; |
||||
|
||||
if (NODE_ENV === 'production') { |
||||
module.exports.plugins.push( |
||||
new webpack.optimize.UglifyJsPlugin({ |
||||
compress: { |
||||
warnings: false, |
||||
drop_console: true, |
||||
unsafe: true |
||||
} |
||||
}) |
||||
); |
||||
module.exports.plugins.push( |
||||
new webpack.optimize.UglifyJsPlugin({ |
||||
compress: { |
||||
warnings: false, |
||||
drop_console: true, |
||||
unsafe: true |
||||
} |
||||
}) |
||||
); |
||||
} |
||||
|
||||