- Published on
Vue-cli3项目模板
- Authors
- Name
- Monster Cone
Webpack 现在是 Vue 项目打包的首选,也是 vue-cli3 脚手架的默认打包工具,在此分享出自己基于 Vue-cli3 创建的项目基础配置,为大家解决 webpack 配置复杂问题。
准备工作
创建项目
$ vue create project-name || vue ui
安装依赖
$ npm install
启动服务
$ npm run serve
生产环境打包
$ npm run build
项目目录
├── public 静态模板资源文件 ├── src 项目文件 ├──|── api 请求接口 ├──|── assets 静态文件 img 、css 、js ├──|── components 全局组件 ├──|── filters 过滤器 ├──|── local i18n翻译 ├──|── plugin 插件 ├──|── router 路由 ├──|── store vuex 数据管理 ├──|── utils 工具文件 ├──|── views 页面文件 ├──|── App.vue 实例文件 ├──|── main.js 入口文件 ├──|── permission.js 路由权限拦截 ├──|── settings.js 组件配置文件 ├── .browserslistrc 项目兼容浏览器版本 ├── .eslintignore eslint忽略文件 ├── .eslintrc.js eslint配置文件 ├── .gitignore git忽略文件 ├── babel.config.js babel配置文件 ├── package.json 项目配置文件 ├── vue.config.js config 配置文件
vue.config.js 配置功能
本地代理
devServer: {
port: 8080, // 端口号
open: false, //配置自动启动浏览器
overlay: {
warnings: false,
errors: false,
},
proxy: 'http://127.0.0.1:8080/'
},
configureWebpack 开启 Gzip 压缩
configureWebpack: config => {
config.plugins.push(
new CompressionWebpackPlugin({
algorithm: 'gzip',
test: /\.(js|scss|css|vue)$/, //匹配文件
threshold: 10240, //压缩大小超过10K的文件
minRatio: 0.8, // 压缩比
})
}
cdn 配置
chainWebpack(config) {
const cdn = {
css: [
'//unpkg.com/element-ui@2.10.1/lib/theme-chalk/index.css'
],
js: [
// vue must at first!
'https://cdn.staticfile.org/vue/2.6.9/vue.min.js',
// vue router
'https://cdn.staticfile.org/vue-router/3.0.2/vue-router.min.js',
// element-ui
'https://unpkg.com/element-ui@2.10.1/lib/index.js'
],
}
config.plugin('html').tap(args => {
args[0].cdn = cdn
return args
})
}
// html模板
<% for(var css of htmlWebpackPlugin.options.cdn.css) { %>
<link rel="stylesheet" href="<%=css%>">
<% } %>
<% for(var js of htmlWebpackPlugin.options.cdn.js) { %>
<script src="<%=js%>"></script>
<% } %>
// 如使用cdn加载,则需要配置externals避免两次引用
configureWebpack: config => {
config.externals = {
'vue': 'Vue',
'vue-router': 'VueRouter',
'element-ui': 'element-ui'
}
}
图片压缩
chainWebpack: (config) => {
config.module
.rule('images')
.test(/\.(png|jpe?g|gif|svg)(\?.*)?$/)
.use('image-webpack-loader')
.loader('image-webpack-loader')
.options({ bypassOnDebug: true })
}
gitHook 配置,代码语法检测
"gitHooks": {
"pre-commit": "lint-staged"
},
"lint-staged": {
"*.{js,jsx,vue}": [
"vue-cli-service lint",
"git add"
]
}