webpack2
webpack
webpack is a module bundler for modern JavaScript applications.
Set up module and resources well, it is helpful for frontend development.
Entry | Kick off app Root |
---|---|
Output | Output |
Loaders | Assets handler .css .html .scss .jpg Loaders in webpack transform these files into modules as they are added to your dependency graph. |
Plugins | Action and custom functionality compilations, chunks |
Example
Create project and set dependencies.
Create project
mkdir webpack-demo cd webpack-demo npm init -y
Generate package.json
Install loader and plugins
npm install --save webpack npm install --save webpack-dev-server npm install --save-dev file-loader csv-loader xml-loader css-loader style-loader extract-text-webpack-plugin sass-loader node-sass npm install --save-dev html-webpack-plugin
Prepare webpack.config.js (webpack configuration file)
var path = require('path'); var webpack = require('webpack'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { // entry: './app/index.js', entry: { main: './app/index.js', vendor: 'moment' }, /* output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist') },*/ output: { filename: '[name].[chunkhash].js', path: path.resolve(__dirname, 'dist') }, module: { rules: [{ test: /\.css$/, //use: [ 'style-loader', 'css-loader' ] use: ExtractTextPlugin.extract({ use: 'css-loader' }) },{ test: /\.scss$/, use: [ { loader: "style-loader" }, { loader: "css-loader" }, { loader: "sass-loader", options: {} }] },{ test: /\.(png|svg|jpg|gif)$/, use: [ 'file-loader' ] },{ test: /\.(woff|woff2|eot|ttf|otf)$/, use: [ 'file-loader' ] },{ test: /\.(csv|tsv)$/, use: 'csv-loader' },{ test: /\.xml$/, use: 'xml-loader', }] }, plugins: [ new ExtractTextPlugin('styles.css'), new webpack.optimize.CommonsChunkPlugin({ name: 'vendor', // Vendor //names: ['vendor', 'manifest'], minChunks: function (module) { // this assumes your vendor imports exist in the node_modules directory return module.context && module.context.indexOf('node_modules') !== -1; } }), //CommonChunksPlugin will now extract all the common modules from vendor and main bundles /* new webpack.optimize.CommonsChunkPlugin({ name: 'manifest' //But since there are no more common modules between them we end up with just the runtime code included in the manifest file })*/ new HtmlWebpackPlugin() ], devServer: { port: 7777, host: 'localhost', noInfo: false, stats: 'minimal' } };
Add npm commands under package.json if you want
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build": "webpack", "clean": "rm -rf dist/*", "probuild": "webpack -p", "start": "webpack-dev-server }
All details are explained by next entries