假设项目为webpack-vue,已有 package.json。
安装基本依赖
1)webpack
装webpack:
npm install webpack webpack-cli --save-dev
这次尝试一下es6语法,webpack的配置文件也有些许变化。
2)babel
npm install babel-loader babel-core babel-preset-env --save-dev
3)eslint
npm install --save-dev eslint
在项目根目录添加.babelrc文件,其中内容是
{
"presets": [
"env"
]
}
这里,如果参考了其他的库对babelrc进行修改,注意如果加入了
"presets": [
["env", {
"modules": true
}]
],
那么就不能再webpack配置文件中使用es6的import新语法了。
所以,不加 “modules”: true。
我是因为要按需引入element-ui组件时发现它要求修改babelrc,就摸到了这点。
按需加载后打包的从2m多降到了不到1m(当然是目前用的组件比较少)。
4)vue
npm install vue —save
其他依赖:css-loader style-loader,加载字体和图片的file-loader, url-loader等,根据需求添加。如果要引入element-ui这样的组件库,那么很可能需要用这些loader来对特殊资源进行加载和打包。
初始化
1)eslint
eslint --init
设置自己需要的规则。
然后在项目根目录生成了.eslintrc.js文件。可以在其中自定义规则。
注意要”env”规则要开启”node”: true,才可以使用__dirname等node环境下的特有变量。
同理,只有开启了浏览器环境,才可以使用浏览器环境特有的window变量。
2)webpack
在package.json中指定webpack打包脚本,
"scripts": {
// ...你的脚本配置
"build": “webpack” // webpack脚本配置
},
这样就可以通过npm run build的方式,让webpack利用默认配置文件进行打包。这个默认配置文件就是webpack.config.js,但是因为这里采用了es6语法,要使用babel对webpack配置文件进行编译,所以,webpack文件的默认配置文件变为webpack.config.babel.js。现在在项目根目录建立webpack.config.babel.js,然后使用es6语法进行设置。
webpack配置文件初期的模板参考。
这里建立了src目录,其中js目录用于存放js文件,app.js文件作为主入口,将需要的js都打包输出到webpack-vue/build/bundle.js中。
import path from 'path';
export default {
entry: ‘./src/js/app.js',
output: {
path: path.resolve(__dirname, 'build'),
filename: 'bundle.js'
}
};
可以运行 npm run build尝试一下。
要注意entry的形式,可以是上面这样的相对路径,也可以path.join(__dirname, ‘src/js/main.js’)。但是’src/xxx.js’似乎不行。
初始化包括但不限于上述步骤。还可以包括建立.gitignore、.editorconfig、.eslintignore等等,编写符合项目需求的配置文件。
开始编码工程
1、测试
在项目根目录下增加一个index.html,内容是:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>webpack-vue</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id=“app">hello</div>
<script src="build/bundle.js"></script>
</body>
</html>
然后,
// src/js/app.js
alert('hello world’);
webpack新增module配置,一定要注意module是不带s的,后面的plugins倒是带s
module: {
rules: [{
test: /\.js$/,
loader: 'babel-loader',
exclude: /ndoe_modules/
}]
},
resolve: {
alias: {
'vue$': 'vue/dist/vue.esm.js' // 用 webpack 1 时需用 'vue/dist/vue.common.js'
}
}
后面的resolve配置用于给页面增加vue编译时环境。因为默认只有运行时环境,这样没法在客户端编译模板,或者挂载到一个元素上并以其 DOM 内部的 HTML 作为模板(比如这里是把vue应用挂到了#app上)
现在运行npm run build,再打开index.html就可以看到效果了。
2、插件
1)让webpack把css打包到bundle.js。
安装loader:npm install --save-dev css-loader style-loader
在webpack的rules数组中添加一条规则:
{
test: /\.css$/,
loader: 'style-loader!css-loader'
}
这时只要在某个入口里,用import ‘你的css路径’; 这种方式就可以将样式打包到bundle.js中。
2)利用html作为模板,自动引入打包后的文件(如本文中的bundle.js)
安装插件:npm install –save-dev html-webpack-plugin
webpack配置文件引入插件:
import HtmlWebpackPlugin from 'html-webpack-plugin’;
添加插件配置:
plugins: [
new HtmlWebpackPlugin({
template: 'index.html’
})
],
这个template就是之前编写的index.html文件。现在可以把其中对bundle.js文件的引用删除。也可以把它移到别的路径,比如src里。
再build一次,发现在build目录自动生成了index.html,而且引入了打包后的bundle.js。
3)And
还有把图片、字体等东西打包到bundle.js中的url-loader。
用于开发的简易服务器。
安装:npm install --save-dev webpack-dev-server
devServer: {
contentBase: './build'
},
脚本:"dev":"webpack-dev-server --open”
, npm run dev
就可以打开看效果了。
字体loader规则:
字体规则:
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000
}
}
或者
{
test: /\.(ttf|eot|woff|woff2)$/,
loader: 'file-loader',
options: {
name: 'fonts/[name].[ext]',
}
}
4)单文件模板加载和解析
还有加载和编译vue单文件模板的loader:
安装:npm install --save-dev vue-loader vue-template-compiler
修改webpack配置。
先导入插件:
import {VueLoaderPlugin} from 'vue-loader’;
设置规则:
{
test: /\.vue$/,
loader: 'vue-loader'
}
增加插件:
plugins: [
// ….
new VueLoaderPlugin()
],
然后修改index.html,
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>webpack-vue</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div id="app">
</div>
</body>
</html>
修改app.js
import Vue from 'vue';
import '../css/main.css';
import App from '../App.vue';
new Vue({
el: '#app',
components: {
App
},
template: '<App/>'
});
增加src/App.vue
<template>
<div id="app">
{{msg}}
</div>
</template>
<script>
export default {
name: 'app',
data() {
return {
msg: 'hello'
}
}
}
</script>
npm run dev
,可以看到效果。
5)局部刷新
修改webpack配置。
先到入webpack:
import webpack from 'webpack’;
然后增加插件:
plugins: [
//...
new webpack.HotModuleReplacementPlugin()
],
最后修改package.json中的运行脚本:
"dev": "webpack-dev-server --hot-only —open"
6)生产环境下的配置
总结
最后总结一下要安装的:
npm install webpack webpack-cli babel-loader babel-core babel-preset-env eslint css-loader style-loader webpack-dev-server vue-loader vue-template-compiler html-webpack-plugin --save-dev
还有npm install vue —save
(要使用element-ui,还要装element-ui、file-loader, url-loader、babel-plugin-component)