---
tags: 前端前台專案功能
---
# 【環境】專案設定 (vue、sass版)
> 版本: vue cli 3, vue cli 4
### 1 安裝 pug
```
yarn add -D pug pug-loader pug-filters pug-plain-loader
yarn add -D pug pug-plain-loader
```
---
### 2 安裝 sass
```
yarn add -D sass sass-loader node-sass
```
---
### 3 Coding Style 設定
#### ESLint
- .eslintrc.js
```javascript=
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint'
},
env: {
browser: true,
},
extends: [
// https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
// consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
'plugin:vue/essential',
// https://github.com/standard/standard/blob/master/docs/RULES-en.md
'standard'
],
// required to lint *.vue files
plugins: [
'vue'
],
// add your custom rules here
rules: {
// allow async-await
'generator-star-spacing': 'off',
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
// custom
'no-unused-vars': 1,
'no-extend-native': 0,
'prefer-promise-reject-errors': 0,
'standard/no-callback-literal': 0,
// vue
'vue/order-in-components': ['error', {
'order': [
"el",
"name",
"parent",
"functional",
["delimiters", "comments"],
["components", "directives", "filters"],
"extends",
"mixins",
"inheritAttrs",
"model",
["props", "propsData"],
"data",
"computed",
"watch",
"LIFECYCLE_HOOKS",
"methods",
["template", "render"],
"renderError"
]
}]
}
}
```
- .eslintignore
```
/build/
/config/
/dist/
/*.js
```
#### stylelint
```
yarn add -D stylelint stylelint-config-prettier stylelint-config-sass-guidelines stylelint-config-standard stylelint-order stylelint-scss pre-commit
```
> pre-commit 主要是應用於 git commit 的前處理。
- 設定規則 .stylelintrc.js
```json
{
"extends": "stylelint-config-standard",
"plugins": [
"stylelint-order",
"stylelint-scss"
],
"rules": {
"number-leading-zero": "never",
"at-rule-no-unknown": null,
"order/properties-order": [
"position",
"top",
"right",
"bottom",
"left",
"z-index",
"display",
"align-items",
"justify-content",
"float",
"clear",
"overflow",
"overflow-x",
"overflow-y",
"margin",
"margin-top",
"margin-right",
"margin-bogttom",
"margin-left",
"padding",
"padding-top",
"padding-right",
"padding-bottom",
"padding-left",
"width",
"min-width",
"max-width",
"height",
"min-height",
"max-height",
"font-size",
"font-family",
"font-weight",
"text-align",
"text-justify",
"text-indent",
"text-overflow",
"text-decoration",
"white-space",
"color",
"background",
"background-position",
"background-repeat",
"background-size",
"background-color",
"background-clip",
"border",
"border-style",
"border-width",
"border-color",
"border-top-style",
"border-top-width",
"border-top-color",
"border-right-style",
"border-right-width",
"border-right-color",
"border-bottom-style",
"border-bottom-width",
"border-bottom-color",
"border-left-style",
"border-left-width",
"border-left-color",
"border-radius",
"opacity",
"filter",
"list-style",
"outline",
"visibility",
"box-shadow",
"text-shadow",
"resize",
"transition"
]
}
}
```
- 新增指令
package.json
```json
{
"scripts": {
"lint": "stylelint app/scss/**/*.scss --syntax scss",
"lint:fix": "stylelint app/scss/**/*.scss --syntax scss --fix"
},
"pre-commit": [
"lint"
],
}
```
- lint:語法為 stylelint [目錄] --syntax [語法種類],也可以直接省略 --syntax 不寫,自動偵測檔案。
- 目錄其實可以根據您的環境進行修改,由於避免目錄很多層而漏掉,因此用了許多 /**/。
- lint:fix:這個指令與上一個沒有多大差別,但最重要的是多了 --fix,顧名思義就是可以自動修正錯誤(謹慎使用)。
- pre-commit:當我們進行 git commit 的時候,會先執行 lint 檢測,如果沒有通過,則會被阻擋下來拒絕提交。
---
### 4 vue.config.js設定
- vue.config.js [文件](https://cli.vuejs.org/zh/config/#%E5%85%A8%E5%B1%80-cli-%E9%85%8D%E7%BD%AE)
```javascript=
// vue.config.js
module.exports = {
devServer: {
proxy: {
...
},
host: process.env.HOST,
port: process.env.PORT,
},
}
```
---
### 5 serve安裝
- [deployment說明](https://cli.vuejs.org/guide/deployment.html#general-guidelines)
```npm install -g serve
# -s flag means serve it in Single-Page Application mode
# which deals with the routing problem below
serve -s dist
```
---
### 6 browserlist設定
[說定說明] (https://github.com/browserslist/browserslist)
以下方法都可達到
- package.json
```json=
{
"private": true,
"dependencies": {
"autoprefixer": "^6.5.4"
},
"browserslist": {
"production": [
"> 1%",
"ie 10"
],
"modern": [
"last 1 chrome version",
"last 1 firefox version"
],
"ssr": [
"node 12"
]
}
}
```
- Or in .browserslistrc config:
```
last 1 version
> 1%
IE 10 # sorry
```