距离上篇文章9102年webpack4搭建vue项目已通过了将近两个月了,一直没有时间写文章,公司项目比较多,这两个月一直在加班,因此呢,因此呢,直到今天才能给你们分享文章,想看上篇文章的同窗点这里juejin.im/post/5c665d…css
好了废话很少说开始撸代码。html
mkdir wepack-vue //文件名字能够随便复制代码
npm init -y复制代码
新建build文件夹vue
mkdir build复制代码
build文件夹新建webpack.base.conf.js,webpack.dev.conf.js,webpack.prod.conf.jsnode
建立src文件夹并建立main.jswebpack
建立index.htmlgit
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>webpack搭建vue项目</title>
</head>
<body>
<div id="app"></div>
</body>
</html>复制代码
下载webpack webpack-dev-server webpack-cligithub
npm i webpack webpack-dev-server webpack-cli -D复制代码
打开webpack.base.config.js,并配置webpack总体属性
web
var path = require('path');
var webpack = require('webpack');
module.exports = {
entry: {
main: path.resolve(__dirname, '../src/main.js')
},
output: {
path: path.resolve(__dirname, '../src'),
filname: '[name].[bash].js',
},
module: {
rules: []
},
pligins: [
new webpack.HashedModuleIdsPlugin(), // 解决vender后面的hash每次都改变
],
resolve: {
}
}复制代码
babel-preset-env 帮助咱们配置 babel。咱们只须要告诉它咱们要兼容的状况(目标运行环境),它就会自动把代码转换为兼容对应环境的代码。
npm
babel-core是做为babel的核心存在,babel的核心api都在这个模块里面
json
tips: babel是7.X的话babel-core必须是6.X,不然不兼容
npm i babel-loader@7 babel-core babel-preset-env -D复制代码
rules:[
{
test: /\.js$/,
use: ['babel-loader'],
exclude: /node_modules/
}
]复制代码
{
"preset": [
['env',{
"targets": {// 指定转译到那个环境
//浏览器环境
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"],
},
//是否将ES6的模块化语法转译成其余类型
"modules": false
}]
]
}复制代码
npm i file-loader -D复制代码
rules:[
{
test: /\.(jpg|png|svg|gif)$/,
use: ['file-loader']
},
{
test: '/\.(woff|woff2|eot|ttf|otf)$/',
use: ['file-loader']
},]复制代码
npm i css-loader vue-style-loader sass-loader node-sass -D复制代码
rules:[
{
test: /\.(sa|sc|c)ss$/,
use: [
{loader: 'vue-style-loader'},
'css-loader',
'sass-loader'
]
},
]复制代码
npm i less-loader less -D复制代码
rules:[
{
test: /\.less$/,
use: [
{loader: 'vue-style-loader'},
'css-loader',
'less-loader'
]
},
]复制代码
npm i html-webpack-plugin -D复制代码
// 引入html-webpack-plugin
var HtmlWebpackPlugin = require('html-webpack-plugin');
plugins: [
new HtmlWebpackPlugin({
template: path.resolve(__diename, '../index.html')
}),
]复制代码
resolve: {
// 可以使用户在引入模块时不带扩展
extensions: ['.js', '.json', '.vue', 'css']
}复制代码
base模块配置了一些东西但没有配置完,会在后边一点一点加上,接下来配置dev和prod
npm i webpack-merge -D复制代码
var merge = require('webpack-merge');
var baseConfig = require('./webpack.base.conf');
var path = require('path');
var webpack = reuire('webpack');
module.exports = merge(baseConfig, {
devtool: 'inline-source-map', // 压缩方式
mode: 'development'
devServer: {
hot: true, // 热更新
open: true, // 自动打开页面
contentBase: path.resolve(__dirname, '../dist'), // 告诉服务从哪提供内容
},
plugins: [
new.webpack.HotModuleReplacementPlugin(), //开启热更新
]
})复制代码
var merge = require('webpack-merge');
var baseConfig = require('./webpack.base.conf');
var path = require('path');
var webpack = reuire('webpack');
module.exports = merge(baseConfig, {
devtool: 'source-map', // 压缩方式
mode: 'production'
plugins: [
]
})复制代码
npm i vue vue-loader vue-template-compiler -D
复制代码
var VueLoaderPlugin = require('vue-loader/lib/plugin');
// 省略代码......
rules:[
{
test: /\.vue$/,
use: ['vue-loader'],
exclude: /node_modules/
},
]
// 省略代码.......复制代码
// 省略代码....
plugins: [
new VueLoaderPlugin(), // 它的职责是将你定义过的其它规则复制并应用到 .vue 文件里相应语言的块
]
// 省略代码...复制代码
// 省略代码...
reslove: {
alias: [
'vue$': 'vue/dist/vue.esm.js', //配置别名 确保webpack能够找到.vue文件
'@': path.resolve(__dirname, '../src')
]
}复制代码
<template>
<div>{{str}}</div>
</template>
<script>
export default {
name: 'App',
data () {
return {
str: 'hello'
}
}}
</script>
<style>
div {
color: red;
}
</style>
复制代码
import VUe from 'vue'
import App from './App'
new Vue({
el: "#app",
render: (h) => h(App)
})复制代码
// 省略代码。。。
"scripts": {
"dev": "webpack-dev-server --progress --config build/webpack.dev.conf.js",
"build": "webpack --config build/webpack.prod.conf.js"
}复制代码
npm run dev复制代码
能够看到项目已经跑起来了
dev.env.js 开发环境配置
'use strict'
module.exports = {
NODE_ENV: '"development"',
BASE_API: '"http://1456"',
}复制代码
prod.env.js 生产环境配置
'use strict'
module.exports = {
NODE_ENV: '"production"', BASE_API: '"http://123.com"',
}复制代码
下载clean-webpack-plugin,并配置webpack.prod.conf.js文件
npm i clean-webpack-plugin -D复制代码
// 引入clean-webpack-plugin
var CleanWebpackPlugin = require('clean-webpack-plugin');
// 省略代码。。。。
plugins: [
new CleanWebPackPlugin();
]复制代码
下载mini-css-extract-plugin,并配置webpack.prod.conf.js文件
npm i mini-css-extract-plugin -D复制代码
更改webpack.prod.conf.js中使用vue-style-loader的代码,更改成
module: {
rules: [
{
test: /\.(c|sc|sa)ss$/,
use: [
{
loader: MiniCssExtractPlugin.loader,
},
'css-loader',
'sass-loader'
]
},
{
test: /\.less$/,
use: [
{
loader: MiniCssExtractPlugin.loader,
},
'css-loader',
'less-loader'
]
}
]
},
复制代码
在webpack.prod.conf.js的plugin中配置
new MiniCssExtractPlugin({
filename: '[name].[hash].js'
})复制代码
webpack.base.conf.js中删除使用vue-style-loader的代码,并在webpack.dev.conf.js中定义
module: {
rules: [
{
test: /\.(c|sc|sa)ss$/,
use: [
{
loader: 'vue-style-loader',
},
'css-loader',
'sass-loader'
]
},
{
test: /\.less$/,
use: [
{
loader: 'vue-style-loader',
},
'css-loader',
'less-loader'
]
}
]
},复制代码
这个配置vue-loader中有提到vue-loader.vuejs.org/zh/guide/ex…
把依赖的第三方库抽取出来单独打包,加快打包进度
下载autodll-webpack-plugin
npm i autodll-webpack-plugin -D复制代码
在webpack.base.conf.js中配置
var AutodllWebpackpackPlugin = require('autodll-webpack-plugin');
plugins: [
new AutodllWebpackpackPlugin ({
inject: true,
debugger: true,
filename: '[name].js',
path: './dll',
entry: {
vendor: ['vue']
}
})
]复制代码
tips: inject
为 true,插件会自动把打包出来的第三方库文件插入到 HTML。
filename
是打包后文件的名称。
path
是打包后的路径。
entry
是入口,
vendor
是你指定的名称,数组内容就是要打包的第三方库的名称,不要写全路径,Webpack 会自动去
node_modules
中找到的。
在 webpack.base.conf.js的 plugins 属性中添加以下插件对象
new webpack.optimize.SplitChunksPlugin()复制代码
下载optimize-css-assets-webpack-plugin和uglifyjs-webpack-plugin
npm i uglifyjs-webpack-plugin uglifyjs-webpack-plugin -D复制代码
在webpack.prod.conf.js中分别引入optimize-css-assets-webpack-plugin和uglifyjs-webpack-plugin并增长optimization
var OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
var UglifyJsPlugin = require("uglifyjs-webpack-plugin");
// ...省略号
optimization: {
minimizer: [
// 压缩JS
new UglifyJsPlugin({
uglifyOptions: {
compress: {
warnings: false, // 去除警告
drop_debugger: true, // 去除debugger
drop_console: true // 去除console.log
},
},
cache: true, // 开启缓存
parallel: true, // 平行压缩
sourceMap: false // set to true if you want JS source maps
}),
// 压缩css
new OptimizeCSSAssetsPlugin({})
]
},复制代码
下载postcss-loader 和autoprefixer
npm i postcss-loader autoprefixer -D复制代码
分别在webpack.dev.conf.js和webpack.prod.conf.js的use中添加postcss-loader
use: [
'postcss-loader'
]复制代码
在项目下增长postcss.config.js
// 配置cssz加前缀
module.exports = {
plugins: [
require('autoprefixer')
]
}复制代码
以上配置的项目就能够跑起来了,谢谢你们,若有错误,敬请指出,一块儿在码农的道路上越走越远
感恩骗点star项目地址github.com/mr-mengbo/w…
下一篇会介绍vue搭建后台项目