webpack
webpack一个项目打包工具,官网
webpack plugin
版权插件:
1 2
| const webpack=require("webpack") new webpack.BannerPlugin("author saxon")
|
打包html插件
1
| npm install --save-dev html-webpack-plugin
|
使用插件:
1 2 3 4
| const htmlWebpackPlugin = require("html-webpack-plugin") new htmlWebpackPlugin({ template: "index.html" })
|
index.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <!DOCTYPE html> <html lang="en">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head>
<body> <div id="app">
</div> </body>
</html>
|
生成的index.html
1 2 3 4 5 6 7 8 9 10 11 12
| <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Document</title></head> <body> <div id="app"></div> <script src="./dist/bundle.js"></script> <script src="bundle.js"></script> </body> </html>
|
压缩js插件
1
| npm install uglifyjs-webpack-plugin --save-dev
|
1 2
| const uglifyjs = require("uglifyjs-webpack-plugin"); new uglifyjs()
|
热部署插件
1
| npm install webpack-dev-server --save-dev
|
在package.json里面配置环境变量
1
| "build":"webpack-dev-server --open"/**加上open 自动打开网页**/
|
在webpack.config.js里面配置使用;
1 2 3 4
| devServer:{ contentBase:"./dist", inline:true }
|
命令行输入:
==特别需要注意的是,我们的使用要有一个叫做webpack-cli的东西,并且版本要和我们的webpack-dev-server一致,否则会报错==
配置文件合并
1
| npm install webpack-merge --save-dev
|
配置主文件:base.config.js
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 43 44 45 46 47 48 49 50 51 52 53 54 55
| "use strict";
var path = require("path");
var VueLoaderPlugin = require('vue-loader/lib/plugin');
var webpack = require("webpack");
var htmlWebpackPlugin = require("html-webpack-plugin");
module.exports = { entry: "./src/main.js", output: { path: path.resolve(__dirname, "../dist"), filename: "bundle.js" }, module: { rules: [{ test: /\.css$/, use: ['style-loader', 'css-loader'] }, { test: /\.(png|jpg|gif)$/, use: [{ loader: 'url-loader', options: { limit: 8192, name: "img/[name]-[hash:8].[ext]" } }] }, { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/ }, { test: /\.vue$/, loader: 'vue-loader' }] }, resolve: { extensions: ['.vue', '.js'], alias: { "vue$": "vue/dist/vue.esm.js" } }, plugins: [ new VueLoaderPlugin(), new webpack.BannerPlugin("author saxon"), new htmlWebpackPlugin({ template: "index.html" })] };
|
由于我们的额node默认不支持es6,所以我们要把格式进行一个降级
生产环境 prod.config.js:
1 2 3 4 5 6 7 8 9 10 11 12
| import uglifyjs from "uglifyjs-webpack-plugin"
import webPackMerge from "webpack-merge"
import baseConfig from "./base.config"
module.exports = webPackMerge(baseConfig,{ plugins: [ new uglifyjs() ] })
|
babel格式化以后的样子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| "use strict";
var _uglifyjsWebpackPlugin = require("uglifyjs-webpack-plugin");
var _uglifyjsWebpackPlugin2 = _interopRequireDefault(_uglifyjsWebpackPlugin);
var _webpackMerge = require("webpack-merge");
var _webpackMerge2 = _interopRequireDefault(_webpackMerge);
var _base = require("./base.config");
var _base2 = _interopRequireDefault(_base);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
module.exports = (0, _webpackMerge2.default)(_base2.default, { plugins: [new _uglifyjsWebpackPlugin2.default()] });
|
dev.config.js
1 2 3 4 5 6 7 8 9 10 11 12
|
import webPackMerge from "webpack-merge"
import baseConfig from "./base.config"
module.exports = webPackMerge(baseConfig, { devServer:{ contentBase:"./dist", inline:true } })
|
然后再package.json里面修改配置运行脚本
1 2
| "build": "webpack --config ./build/prod.config.js", "dev": "webpack-dev-server --config ./build/dev.config.js"
|
需要注意的是,由于我们的配置文件被移动到build里面了所以我们的配置文件位置需要自己指定一下,然后测试