虽然vue-cli 4.x都快release了,但是该整理还是要整理……
需求项目标配:
- vue-router
- sass/scss
- 打包地址配置
- proxy table
- 正式环境关闭source map
- 支持全局引用scss(可以全局mixin)
环境声明:
- 官方文档:https://cli.vuejs.org/zh/guide/installation.html
简略版:
如果想要使用vue-cli 3.x,那么
安装(全局):
npm install -g @vue/cli
# OR
yarn global add @vue/cli
卸载(全局):
npm uninstall vue-cli -g
# OR
yarn global remove vue-cli
如果想要使用vue-cli 1.x或者2.x,要使用vue-cli这个包名进行下载
- 本文环境:
@vue/cli 3.11.0
初始化项目
基础项目
vue create vue-cli-demo
- 如果需要手动配置,则根据https://cli.vuejs.org/zh/guide/creating-a-project.html#vue-create 自行观看;这里使用默认配置(选择default),eslint+babel
添加vue-router
- 截止至19.12.05,还不支持通过
vue add vue-router
的方式导入vue-router,所以我们走原始的。 - vue-cli 3.x项目默认使用yarn,所以后续安装也都使用yarn来进行。
# download vue-router
yarn add vue-router
<!-- App.vue -->
<!-- 动态加载页面 -->
<template>
<div id="app">
<router-view/>
</div>
</template>
- 新建文件夹router以及内部文件main.js,使结构为:
.
├── App.vue
├── assets
│ └── logo.png
├── components
│ └── HelloWorld.vue
├── main.js
└── router
└── index.js
// @/router/index.js
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
// 项目惯用的懒加载
const myComponents = {
HelloWorld: r => require.ensure([], () => r(require('@/components/HelloWorld')), 'com-hello-world')
}
export default new Router({
routes: [
{
path: '/hello',
name: 'HelloWorld',
component: myComponents.HelloWorld,
beforeEnter: function (to, from, next) {
document.title = 'vue project'
next()
}
},
{
path: '/*',
redirect: '/hello'
}
]
})
import Vue from 'vue'
import router from './router'
import App from './App.vue'
Vue.config.productionTip = false
new Vue({
router,
render: h => h(App),
}).$mount('#app')
- 现在打开链接,就能通过
/#/hello
的哈希路由访问到了。 - 后续如果需要增加页面,继续增加对应的组件即可。
添加sass/scss
yarn add sass-loader
# And
yarn add node-sass
打包地址配置+关闭正式环境source map
新建vue.config.js在项目根目录,内容如:
// vue.config.js
module.exports = {
publicPath: '',
outputDir: 'dist', // 绝对路径的输出路径,打包的地址在这里
assetsDir: 'static',
lintOnSave: process.env.NODE_ENV === 'development', // Eslint只在开发环境有效
productionSourceMap: false, // 关闭正式环境的source map
devServer: {
proxy: '' // proxy可以是一个字符串(目标地址),也可以是一个对象{'/foo': {target: '<other_url>'}}
}
}
支持全局引用scss(可以全局mixin)
// vue.config.js
module.export = {
// 加项
css: {
loaderOptions: {
scss: {
prependData: `@import '~@/assets/css/index.scss';`
}
}
}
}