初始化 运行环境
安装 (webpack和webpack-dev-server)
1 2
| npm install -S webpack webapck-dev-server
|
配置package.json 和webpack.config.js
1 2 3 4 5 6 7
| "script": { "dev": "webpack-dev-server --open --config webpack-dev-server", "build": "webpack" }
|
入口配置和出口环境配置
1 2 3 4 5 6 7 8 9 10 11 12 13
| const path = require("path") const config = { entry: { app: './mian.js' }, output: { path: path.join(__dirname, './dist'), pubilcPath: '/dist/', filename: './app.js' } }
|
css样式输出配置
1 2 3 4 5 6 7 8 9 10 11 12
| npm install -S css-loader style-loader
module: { rules:[ { test: /\.css$/, use: ['style-loader', 'css-loader'] } ] }
|
温馨提示: 在配置文件中的modules对象的rules属性中,可以指定一系列的loaders,每个loader都必须包含test和use两个选项,当webpack编译过程中遇到require和import语句导入一个为.css的文件,将它通过css-loader转换,再通过style-loader转换,然后继续打包,use选项的值可以是数组或者字符串,如果是数组,编译顺序就是从后往前编译
配置 将css整合并生成main.css文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| npm install -S extract-text-webpack-plugin
{ const ExtractTextPlugin = require("extract-text-webpack-plugin") module: { rules:[ { test: /\.css$/, use: ExtractTextPlugin.extract({ use: 'css-loader', fallback: 'style-loader' }) } ] } plugins: [ new ExtractTextPlugin("mian.css") ] }
error: Use Chunks.groupsIterable and filter by instanceof Entrypoint instead method: extract-text-webpack-plugin版本过低,安装最新版本的extract-text-webpack-plugin
npm install --save-dev extract-text-webpack-plugin@4.0.0-beta.0
|
在webpack中配置vue-loader对.vue格式的文件进行处理
.vue文件需要安装vue-loader, vye-style-loader
es6语法需要安装babel-loader和babel
1 2 3 4 5 6 7 8 9 10 11 12
| npm install --save vue npm install --save-dev vue-loader npm install --save-dev vue-style-loader npm install --save-dev vue-template-compiler npm install --save-dev vue-hot-reload-api npm install --save-dev babel npm install --save-dev babel-loader npm install --save-dev babel-core npm install --save-dev babel-plugin-transform-runtime npm install --save-dev babel-preset-es2015 npm install --save-dev babel-runtime
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| const VueLoaderPlugin = require('vue-loader/lib/plugin') module: { rules: [ { test: /\.css$/, use: ExtractTextPlugin.extract({ use: 'css-loader', fallback: 'style-loader' }) }, { test: /\.vue$/, loader: 'vue-loader', options: { loader: { css: ExtractTextPlugin.extract({ use: 'css-loader', fallback: 'vue-style-loader' }) } } }, { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/ } ] }, plugins:[ new VueLoaderPlugin() ]
|
vue文件注意事项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="/dist/main.css"> </head> <body> <div id="app"></div> // type="text/javascript" 必须填写,负责会有部分代码无法识别 <script type="text/javascript" src="/dist/main.js"></script> </body> </html>
|
设置文件导入省略后缀
1 2 3 4 5 6 7 8
| resolve: { extensions: ['.js', '.vue', '.json'], alias: { '@': resolve('src') } }
|
配置url-loader和file-loader来支持图片、字体等文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| npm install -D url-loader file-loader
rules: [ { test: /\.(gif|jpg|png|woff|svg|ect|ttf)\??.*$/, loader: 'url-loader?limit=1024' } ]
|
项目打包依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| npm install -D webpack-merge html-webpack-plugin
var webpack=require('webpack'); var HtmlwebpackPlugin=require('html-webpack-plugin'); var ExtractTextPlugin=require('extract-text-webpack-plugin'); var merge=require('webpack-merge'); var webpackBaseConfig=require('./webpack.config.js'); const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
module.exports=merge(webpackBaseConfig,{ output:{ publicPath:'/dist/',
filename:'[name].[hash].js' }, plugins:[ new ExtractTextPlugin({
filename:'[name].[hash].css', allChunks:true }),
new webpack.DefinePlugin({ 'process.env':{ NODE_ENV:'"production"' } }),
new UglifyJsPlugin(),
new HtmlwebpackPlugin({ filename:'index.html', template:'./index.html', inject:true }), ] });
"build":"webpack --progress --hide-modules --config webpack.prod.config.js"
|
报错解决
1 2 3
| htmlwebpackPlugin is not defined
报错是因为ejs文件的htmlwebpackPlugin拼写错误,换成htmlWebpackPlugin
|