возобновить
описывать
На основе vue-cli4.0+ webpack 4 + vant ui + решение для адаптации sass+ rem + пакет axios, создание каркаса шаблона мобильного телефона
адрес проекта:github
Требования к версии узла
Vue CLIТребуется Node.js 8.9 или выше (рекомендуется 8.11.0+). вы можете использоватьnvmилиnvm-windowsУправление несколькими версиями Node на одном компьютере.
Этот пример Node.js 12.14.1
Стартовый проект
git clone https://github.com/sunniejs/vue-h5-template.git
cd vue-h5-template
npm install
npm run serve
содержание
- √ Vue-cli4
- √ Настройка нескольких переменных среды
- √ Решение адаптации REM
- √ План адаптации ВМ
- √ Компоненты VantUI загружаются по требованию
- √ Глобальные стили Sass
- √ Управление состоянием Vuex
- √ Vue-маршрутизатор
- √ Упаковка Axios и управление интерфейсом
- √ Базовая конфигурация Webpack 4 vue.config.js
- √ Настроить псевдоним псевдоним
- √ Настроить междоменный прокси
- √ Анализ упаковки конфигурации
- √ Настройка внешних устройств для импорта ресурсов cdn
- √ Удалить console.log
- √ Splitchunks Пакет сторонних модулей отдельно
- √ Добавить совместимость с IE
- √ Единая спецификация разработки Eslint+Petier
Мультисредовая разработка
package.jsonвнутреннийscriptsнастроитьserve stage build,пройти через--mode xxxвыполнять в различных средах
- пройти через
npm run serveзапустить локально, выполнитьdevelopment - пройти через
npm run stageпакетный тест, выполнитьstaging - пройти через
npm run buildОфициально упаковано, выполненоproduction
"scripts": {
"serve": "vue-cli-service serve --open",
"stage": "vue-cli-service build --mode staging",
"build": "vue-cli-service build",
}
Введение в конфигурацию
кVUE_APP_Переменные в начале кода можно передавать в кодprocess.env.VUE_APP_доступ.
Например,VUE_APP_ENV = 'development'пройти черезprocess.env.VUE_APP_ENVдоступ.
КромеVUE_APP_*В дополнение к переменным есть две специальные переменные, которые всегда доступны в коде вашего приложения.NODE_ENVа такжеBASE_URL
Создайте новый проект в корневом каталоге проекта.env.*
- .env.development конфигурация локальной среды разработки
NODE_ENV='development'
# must start with VUE_APP_
VUE_APP_ENV = 'development'
- .env.staging конфигурация тестовой среды
NODE_ENV='production'
# must start with VUE_APP_
VUE_APP_ENV = 'staging'
- .env.production официальная конфигурация среды
NODE_ENV='production'
# must start with VUE_APP_
VUE_APP_ENV = 'production'
Здесь мы не определяем много переменных, только базовую VUE_APP_ENV.development staging production
переменные, которые мы объединяем вsrc/config/env.*.jsуправление в.
Есть проблема, так как три соответствующих файла имеют здесь зависимости от файла настроек переменных среды, зачем идти под новый конфиг?
Удобно модифицировать и не нужно перезапускать проект, что соответствует привычкам разработчиков.
config/index.js
// 根据环境引入不同配置 process.env.NODE_ENV
const config = require('./env.' + process.env.VUE_APP_ENV)
module.exports = config
Настройте переменные, соответствующие среде, и возьмите локальный файл среды.env.development.jsНапример, пользователи могут изменять в соответствии со своими потребностями.
// 本地环境配置
module.exports = {
title: 'vue-h5-template',
baseUrl: 'http://localhost:9018', // 项目地址
baseApi: 'https://test.xxx.com/api', // 本地api请求地址
APPID: 'xxx',
APPSECRET: 'xxx'
}
В зависимости от окружения переменные будут разными
// 根据环境不同引入不同baseApi地址
import {baseApi} from '@/config'
console.log(baseApi)
rem адаптационное решение
Стили в Ванте используются по умолчаниюpxкак единое целое, при необходимости используйтеremединиц, рекомендуются следующие два инструмента:
-
postcss-pxtoremэто
postcssПлагин для преобразования единиц вrem -
lib-flexibleдля установки
remИсходная величина
Конфигурация PostCSS
Ниже приведены основныеpostcssКонфигурация, которая может быть изменена на основе этой конфигурации в соответствии с требованиями проекта
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
plugins: {
autoprefixer: {
overrideBrowserslist: ['Android 4.1', 'iOS 7.1', 'Chrome > 31', 'ff > 31', 'ie >= 8']
},
'postcss-pxtorem': {
rootValue: 37.5,
propList: ['*']
}
}
}
Подробнее:vant
Обязательно к посещению для новичков, пропустите для ветеранов
Многие друзья будут спрашивать меня об адаптации.
мы знаем1remравныйhtmlустанавливается корневым элементомfont-sizeизpxстоимость. Настройки пользовательского интерфейса ВантаrootValue: 37.5, можно посмотреть под айфон 6 см.(1rem 等于 37.5px):
<html data-dpr="1" style="font-size: 37.5px;"></html>
Переключение разных моделей, корневой элемент может быть другимfont-size. Когда вы пишете стиль css px, он будет преобразован программой вremдостичь пригодности.
Поскольку мы используем компоненты Vant, нам необходимо следоватьrootValue: 37.5писать стили.
Например: дизайн дает вам изображение размером 750 пикселей * 1334 пикселей, которое закрывает экран на iPhone6 и адаптируется к другим моделям.
- когда
rootValue: 70, стильwidth: 750px;height: 1334px;Картинка заполнит экран iPhone 6. В это время, если вы переключитесь на другие модели, картинка тоже заполнится. - когда
rootValue: 37.5когда стильwidth: 375px;height: 667px;Картинка заполнит экран iPhone 6.
То есть писать CSS шириной 375px под iPhone 6. Другие, вы можете написать соответствующий стиль в соответствии с вашим дизайнерским рисунком.
Конечно, вы можете использовать 100% для заполнения экрана, это просто пример.
<img class="image" src="https://imgs.solui.cn/weapp/logo.png" />
<style>
/* rootValue: 75 */
.image {
width: 750px;
height: 1334px;
}
/* rootValue: 37.5 */
.image {
width: 375px;
height: 667px;
}
</style>
схема адаптации вм
В этом проекте используется схема адаптации rem.На самом деле, какую бы схему вы ни использовали, вам не нужно рассчитывать, сколько стоит rem или vw 12px.В этом вам помогут специальные инструменты. Если вы хотите использовать vw, вы можете переключиться следующим образом.
1. Установите зависимости
npm install postcss-px-to-viewport -D
2. Измените .postcssrc.js
Измените файл .postcssrc.js в корневом каталоге следующим образом.
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
plugins: {
autoprefixer: {
overrideBrowserslist: ['Android 4.1', 'iOS 7.1', 'Chrome > 31', 'ff > 31', 'ie >= 8']
},
'postcss-px-to-viewport': {
viewportWidth: 375, // 视窗的宽度,对应的是我们设计稿的宽度,一般是750
unitPrecision: 3, // 指定`px`转换为视窗单位值的小数位数(很多时候无法整除)
viewportUnit: 'vw', // 指定需要转换成的视窗单位,建议使用vw
selectorBlackList: ['.ignore', '.hairlines'], // 指定不转换为视窗单位的类,可以自定义,可以无限添加,建议定义一至两个通用的类名
minPixelValue: 1, // 小于或等于`1px`不转换为视窗单位,你也可以设置为你想要的值
mediaQuery: false // 允许在媒体查询中转换`px`
}
}
}
3. Удалите исходный код, связанный с rem.
src/main.js удалите следующий код
// 移动端适配
import 'lib-flexible/flexible.js'
package.json удалите следующий код
"lib-flexible": "^0.3.2",
"postcss-pxtorem": "^5.1.1",
При работе элемент F12 css является единицей измерения vw.
Компоненты VantUI загружаются по запросу
Проект принимаетVant автоматически импортирует компоненты по запросу (рекомендуется)Ниже приведено введение в установку плагина:
babel-plugin-importэтоbabelплагин, который будетimportСпособ написания автоматически преобразуется в способ импорта по запросу
Установить плагин
npm i babel-plugin-import -D
существуетbabel.config.jsнастраивать
// 对于使用 babel7 的用户,可以在 babel.config.js 中配置
const plugins = [
[
'import',
{
libraryName: 'vant',
libraryDirectory: 'es',
style: true
},
'vant'
]
]
module.exports = {
presets: [['@vue/cli-plugin-babel/preset', {useBuiltIns: 'usage', corejs: 3}]],
plugins
}
Но его все равно приходится вводить каждый раз при использовании страницы, что очень хлопотно.src/plugins/vant.jsВ рамках единого компонента управления, который необходимо импортировать, нет необходимости повторять введение, так что его можно использовать прямо на странице, что удобно ~
// 按需全局引入 vant组件
import Vue from 'vue'
import {Button, List, Cell, Tabbar, TabbarItem} from 'vant'
Vue.use(Button)
Vue.use(Cell)
Vue.use(List)
Vue.use(Tabbar).use(TabbarItem)
Глобальный стиль SASS
Сначала вы можете столкнутьсяnode-sassЕсли установка не удалась, не сдавайтесь и попробуйте несколько раз! ! !
Соответствующий стиль каждой страницы записывается в отдельный файл .vue.scopedОн добавляет концепцию домена в CSS, как следует из его названия.
<style lang="scss">
/* global styles */
</style>
<style lang="scss" scoped>
/* local styles */
</style>
Структура каталогов
vue-h5-template все глобальные стили находятся в@/src/assets/cssнастройки каталога
├── assets
│ ├── css
│ │ ├── index.scss # 全局通用样式
│ │ ├── mixin.scss # 全局mixin
│ │ └── variables.scss # 全局变量
Пользовательские стили пользовательского интерфейса
Теперь поговорим о том, как переписатьvant-uiстиль. из-заvant-uiМы вводим стиль глобально, поэтому, если вы хотите переопределить его стиль на определенной странице, вы не можете добавитьscoped, но вы хотите переопределить только эту страницуvantстиль, вы можете добавитьclass, используйте пространства имен для решения проблемы.
.about-container {
/* 你的命名空间 */
.van-button {
/* vant-ui 元素*/
margin-right: 0px;
}
}
Родительский компонент изменяет стиль дочернего компонента Глубокий селектор
когда ваш дочерний компонент используетscopedНо если вы хотите изменить стиль дочернего компонента в родительском компоненте, вы можете передать>>>реализовать:
<style scoped>
.a >>> .b { /* ... */ }
</style>
глобальная переменная
vue.config.jsНастроить с помощьюcss.loaderOptionsвариант, впрыскsassизmixin variablesВ глобальном, не нужно вручную импортировать, настраивать$cdnВведите адрес cdn в качестве переменной, тем самым передав общую глобальную переменную всем стилям Sass/Less:
const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)
const defaultSettings = require('./src/config/index.js')
module.exports = {
css: {
extract: IS_PROD,
sourceMap: false,
loaderOptions: {
// 给 scss-loader 传递选项
scss: {
// 注入 `sass` 的 `mixin` `variables` 到全局, $cdn可以配置图片cdn
// 详情: https://cli.vuejs.org/guide/css.html#passing-options-to-pre-processor-loaders
prependData: `
@import "assets/css/mixin.scss";
@import "assets/css/variables.scss";
$cdn: "${defaultSettings.$cdn}";
`,
},
},
},
}
Доступно в настройках js$cdn,.vueиспользуется в файлеthis.$cdnдоступ
// 引入全局样式
import '@/assets/css/index.scss'
// 设置 js中可以访问 $cdn
// 引入cdn
import { $cdn } from '@/config'
Vue.prototype.$cdn = $cdn
Использование в css и js
<script>
console.log(this.$cdn)
</script>
<style lang="scss" scoped>
.logo {
width: 120px;
height: 120px;
background: url($cdn+'/weapp/logo.png') center / contain no-repeat;
}
</style>
Управление состоянием Vuex
Структура каталогов
├── store
│ ├── modules
│ │ └── app.js
│ ├── index.js
│ ├── getters.js
main.jsпредставлять
import Vue from 'vue'
import App from './App.vue'
import store from './store'
new Vue({
el: '#app',
router,
store,
render: h => h(App)
})
использовать
<script>
import {mapGetters} from 'vuex'
export default {
computed: {
...mapGetters(['userName'])
},
methods: {
// Action 通过 store.dispatch 方法触发
doDispatch() {
this.$store.dispatch('setUserName', '真乖,赶紧关注公众号,组织都在等你~')
}
}
}
</script>
Vue-router
Этот случай принимаетhashРежим, разработчик может изменить его в соответствии с потребностямиmode base
Уведомление: если вы использовалиhistoryмодель,vue.config.jsсерединаpublicPathсделать соответствующееИсправлять
Перейти к: базовой конфигурации vue.config.js
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
export const router = [
{
path: '/',
name: 'index',
component: () => import('@/views/home/index'), // 路由懒加载
meta: {
title: '首页', // 页面标题
keepAlive: false // keep-alive 标识
}
}
]
const createRouter = () =>
new Router({
// mode: 'history', // 如果你是 history模式 需要配置 vue.config.js publicPath
// base: '/app/',
scrollBehavior: () => ({y: 0}),
routes: router
})
export default createRouter()
Более:Vue Router
Упаковка Axios и управление интерфейсом
utils/request.jsЧтобы инкапсулировать аксиомы, разработчикам необходимо модифицировать их в соответствии с фоновым интерфейсом.
-
service.interceptors.request.useВы можете установить заголовки запроса, такие как установкаtoken -
config.hideloadingЗадается в параметрах интерфейса под папкой api, о которой речь пойдет ниже -
service.interceptors.response.useВы можете вернуть обработку данных в интерфейс, например, 401 удалить локальную информацию, войти снова
Управление интерфейсом
существуетsrc/apiЕдиный интерфейс управления в папке
- Вы можете создать несколько интерфейсов стыковки модулей, например
home.jsИнтерфейс домашней страницы объясняется здесьuser.js -
urlАдрес интерфейса, который будет склеен при запросеconfigвнизbaseApi -
methodметод запроса -
dataпараметры запросаqs.stringify(params)это операция сериализации данных -
hideloadingПо умолчаниюfalse,Установить какtrueПосле этого некоторые интерфейсы при загрузке пользовательского интерфейса не должны восприниматься пользователем.
import qs from 'qs'
// axios
import request from '@/utils/request'
//user api
// 用户信息
export function getUserInfo(params) {
return request({
url: '/user/userinfo',
method: 'post',
data: qs.stringify(params),
hideloading: true // 隐藏 loading 组件
})
}
Как позвонить
// 请求接口
import {getUserInfo} from '@/api/user.js'
const params = {user: 'sunnie'}
getUserInfo(params)
.then(() => {})
.catch(() => {})
Базовая конфигурация Webpack 4 vue.config.js
если вашVue Routerрежим хэш
publicPath: './',
если вашVue RouterШаблон - это история publicPath здесь и вашVue Router base Продолжай
publicPath: '/app/',
const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)
module.exports = {
publicPath: './', // 署应用包时的基本 URL。 vue-router hash 模式使用
// publicPath: '/app/', // 署应用包时的基本 URL。 vue-router history模式使用
outputDir: 'dist', // 生产环境构建文件的目录
assetsDir: 'static', // outputDir的静态资源(js、css、img、fonts)目录
lintOnSave: false,
productionSourceMap: false, // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
devServer: {
port: 9020, // 端口号
open: false, // 启动后打开浏览器
overlay: {
// 当出现编译器错误或警告时,在浏览器中显示全屏覆盖层
warnings: false,
errors: true
}
// ...
}
}
Настроить псевдоним псевдоним
const path = require('path')
const resolve = dir => path.join(__dirname, dir)
const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)
module.exports = {
chainWebpack: config => {
// 添加别名
config.resolve.alias
.set('@', resolve('src'))
.set('assets', resolve('src/assets'))
.set('api', resolve('src/api'))
.set('views', resolve('src/views'))
.set('components', resolve('src/components'))
}
}
Настроить междоменный прокси
Если для вашего проекта требуются междоменные настройки, вам нужно позвонитьvue.config.js proxyПрокомментируйте и настройте соответствующие параметры
Уведомление: вам также нужно поставитьsrc/config/env.development.jsвнутреннийbaseApiустановлен в '/'
module.exports = {
devServer: {
// ....
proxy: {
//配置跨域
'/api': {
target: 'https://test.xxx.com', // 接口的域名
// ws: true, // 是否启用websockets
changOrigin: true, // 开启代理,在本地创建一个虚拟服务端
pathRewrite: {
'^/api': '/'
}
}
}
}
}
Используйте, например:src/api/home.js
export function getUserInfo(params) {
return request({
url: '/api/userinfo',
method: 'get',
data: qs.stringify(params)
})
}
Настройка анализа упаковки
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
module.exports = {
chainWebpack: config => {
// 打包分析
if (IS_PROD) {
config.plugin('webpack-report').use(BundleAnalyzerPlugin, [
{
analyzerMode: 'static'
}
])
}
}
}
npm run build
Настройте внешние ресурсы для импорта ресурсов cdn
Эта версия CDN больше не представлена. Я тестировал с использованием CDN и без него. Неиспользование займет меньше времени, чем его использование. Многие статьи в Интернете тестируют скорость CDN, и этот разработчик действительно может ее протестировать.
Кроме того, общедоступный CDN, используемый в проекте, нестабилен, и разрешение доменного имени также требует времени (если вы хотите его использовать, попробуйте использовать то же доменное имя).
потому что каждый раз, когда страница встречает<script>теги прекратят синтаксический анализ и выполнение, поэтому его следует максимально сократить.<script>количество этикетокHTTPВ запросе есть определенные накладные расходы, файлы 100К загружаются быстрее, чем 5 файлов по 20К, поэтому необходимо иметь меньше скриптов
На данный момент нет исследований по размещению его на моем собственном сервере cdn, и я продолжу его оптимизировать позже ~
const defaultSettings = require('./src/config/index.js')
const name = defaultSettings.title || 'vue mobile template'
const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)
// externals
const externals = {
vue: 'Vue',
'vue-router': 'VueRouter',
vuex: 'Vuex',
vant: 'vant',
axios: 'axios'
}
// CDN外链,会插入到index.html中
const cdn = {
// 开发环境
dev: {
css: [],
js: []
},
// 生产环境
build: {
css: ['https://cdn.jsdelivr.net/npm/vant@2.4.7/lib/index.css'],
js: [
'https://cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js',
'https://cdn.jsdelivr.net/npm/vue-router@3.1.5/dist/vue-router.min.js',
'https://cdn.jsdelivr.net/npm/axios@0.19.2/dist/axios.min.js',
'https://cdn.jsdelivr.net/npm/vuex@3.1.2/dist/vuex.min.js',
'https://cdn.jsdelivr.net/npm/vant@2.4.7/lib/index.min.js'
]
}
}
module.exports = {
configureWebpack: config => {
config.name = name
// 为生产环境修改配置...
if (IS_PROD) {
// externals
config.externals = externals
}
},
chainWebpack: config => {
/**
* 添加CDN参数到htmlWebpackPlugin配置中
*/
config.plugin('html').tap(args => {
if (IS_PROD) {
args[0].cdn = cdn.build
} else {
args[0].cdn = cdn.dev
}
return args
})
}
}
Добавить в Public / index.html
<!-- 使用CDN的CSS文件 -->
<% for (var i in
htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.css) { %>
<link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="preload" as="style" />
<link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="stylesheet" />
<% } %>
<!-- 使用CDN加速的JS文件,配置在vue.config.js下 -->
<% for (var i in
htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.js) { %>
<script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
<% } %>
удалить console.log
Тестовая среда и локальная среда сохраняютсяconsole.log
npm i -D babel-plugin-transform-remove-console
Настроить в babel.config.js
// 获取 VUE_APP_ENV 非 NODE_ENV,测试环境依然 console
const IS_PROD = ['production', 'prod'].includes(process.env.VUE_APP_ENV)
const plugins = [
[
'import',
{
libraryName: 'vant',
libraryDirectory: 'es',
style: true
},
'vant'
]
]
// 去除 console.log
if (IS_PROD) {
plugins.push('transform-remove-console')
}
module.exports = {
presets: [['@vue/cli-plugin-babel/preset', {useBuiltIns: 'entry'}]],
plugins
}
splitChunks упаковывает сторонние модули отдельно
module.exports = {
chainWebpack: config => {
config.when(IS_PROD, config => {
config
.plugin('ScriptExtHtmlWebpackPlugin')
.after('html')
.use('script-ext-html-webpack-plugin', [
{
// 将 runtime 作为内联引入不单独存在
inline: /runtime\..*\.js$/
}
])
.end()
config.optimization.splitChunks({
chunks: 'all',
cacheGroups: {
// cacheGroups 下可以可以配置多个组,每个组根据test设置条件,符合test条件的模块
commons: {
name: 'chunk-commons',
test: resolve('src/components'),
minChunks: 3, // 被至少用三次以上打包分离
priority: 5, // 优先级
reuseExistingChunk: true // 表示是否使用已有的 chunk,如果为 true 则表示如果当前的 chunk 包含的模块已经被抽取出去了,那么将不会重新生成新的。
},
node_vendors: {
name: 'chunk-libs',
chunks: 'initial', // 只打包初始时依赖的第三方
test: /[\\/]node_modules[\\/]/,
priority: 10
},
vantUI: {
name: 'chunk-vantUI', // 单独将 vantUI 拆包
priority: 20, // 数字大权重到,满足多个 cacheGroups 的条件时候分到权重高的
test: /[\\/]node_modules[\\/]_?vant(.*)/
}
}
})
config.optimization.runtimeChunk('single')
})
}
}
Добавьте совместимость с IE.
Предыдущий способ сообщит@babel/polyfill is deprecated. Please, use required parts of core-js and regenerator-runtime/runtime separately
@babel/polyfillвыбросить, использоватьcore-jsа такжеregenerator-runtime
npm i --save core-js regenerator-runtime
существуетmain.jsдобавлено в
// 兼容 IE
// https://github.com/zloirock/core-js/blob/master/docs/2019-03-19-core-js-3-babel-and-a-look-into-the-future.md#babelpolyfill
import 'core-js/stable'
import 'regenerator-runtime/runtime'
настроитьbabel.config.js
const plugins = []
module.exports = {
presets: [['@vue/cli-plugin-babel/preset', {useBuiltIns: 'usage', corejs: 3}]],
plugins
}
Единая спецификация разработки Eslint+Petier
Установка VScode (версия 1.47.3)eslint prettier veturплагин.vueФайлы форматируются с помощью vetur, другие используютprettier, я напишу о том, как использовать эти три вещи вместе позже
в файле.prettierrcНапишите свои мелкие правила
{
"printWidth": 120,
"tabWidth": 2,
"singleQuote": true,
"trailingComma": "none",
"semi": false,
"wrap_line_length": 120,
"wrap_attributes": "auto",
"proseWrap": "always",
"arrowParens": "avoid",
"bracketSpacing": false,
"jsxBracketSameLine": true,
"useTabs": false,
"overrides": [{
"files": ".prettierrc",
"options": {
"parser": "json"
}
}]
}
Настройки Vscode.json
{
// 将设置放入此文件中以覆盖默认设置
"files.autoSave": "off",
// 控制字体系列。
"editor.fontFamily": "Consolas, 'Courier New', monospace,'宋体'",
"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe",
// 以像素为单位控制字号。
"editor.fontSize": 16,
// 控制选取范围是否有圆角
"editor.roundedSelection": false,
// 建议小组件的字号
"editor.suggestFontSize": 16,
// 在“打开的编辑器”窗格中显示的编辑器数量。将其设置为 0 可隐藏窗格。
"explorer.openEditors.visible": 0,
// 是否已启用自动刷新
"git.autorefresh": true,
// 以像素为单位控制终端的字号,这是 editor.fontSize 的默认值。
"terminal.integrated.fontSize": 14,
// 控制终端游标是否闪烁。
"terminal.integrated.cursorBlinking": true,
// 一个制表符等于的空格数。该设置在 `editor.detectIndentation` 启用时根据文件内容进行重写。
// Tab Size
"editor.tabSize": 2,
// By default, common template. Do not modify it!!!!!
"editor.formatOnType": true,
"window.zoomLevel": 0,
"editor.detectIndentation": false,
"css.fileExtensions": ["css", "scss"],
"files.associations": {
"*.string": "html",
"*.vue": "vue",
"*.wxss": "css",
"*.wxml": "wxml",
"*.wxs": "javascript",
"*.cjson": "jsonc",
"*.js": "javascript"
},
// 为指定的语法定义配置文件或使用带有特定规则的配置文件。
"emmet.syntaxProfiles": {
"vue-html": "html",
"vue": "html"
},
"search.exclude": {
"**/node_modules": true,
"**/bower_components": true
},
//保存时eslint自动修复错误
"editor.formatOnSave": true,
// Enable per-language
//配置 ESLint 检查的文件类型
"editor.quickSuggestions": {
"strings": true
},
// 添加 vue 支持
// 这里是针对vue文件的格式化设置,vue的规则在这里生效
"vetur.format.options.tabSize": 2,
"vetur.format.options.useTabs": false,
"vetur.format.defaultFormatter.html": "js-beautify-html",
"vetur.format.defaultFormatter.css": "prettier",
"vetur.format.defaultFormatter.scss": "prettier",
"vetur.format.defaultFormatter.postcss": "prettier",
"vetur.format.defaultFormatter.less": "prettier",
"vetur.format.defaultFormatter.js": "vscode-typescript",
"vetur.format.defaultFormatter.sass": "sass-formatter",
"vetur.format.defaultFormatter.ts": "prettier",
"vetur.format.defaultFormatterOptions": {
"js-beautify-html": {
"wrap_attributes": "aligned-multiple", // 超过150折行
"wrap-line-length": 150
},
// #vue组件中html代码格式化样式
"prettier": {
"printWidth": 120,
"tabWidth": 2,
"singleQuote": false,
"trailingComma": "none",
"semi": false,
"wrap_line_length": 120,
"wrap_attributes": "aligned-multiple", // 超过150折行
"proseWrap": "always",
"arrowParens": "avoid",
"bracketSpacing": true,
"jsxBracketSameLine": true,
"useTabs": false,
"overrides": [
{
"files": ".prettierrc",
"options": {
"parser": "json"
}
}
]
}
},
// Enable per-language
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"vetur.validation.template": false,
"html.format.enable": false,
"json.format.enable": false,
"javascript.format.enable": false,
"typescript.format.enable": false,
"javascript.format.insertSpaceAfterFunctionKeywordForAnonymousFunctions": false,
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[vue]": {
"editor.defaultFormatter": "octref.vetur"
},
"emmet.includeLanguages": {
"wxml": "html"
},
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
// 开启eslint自动修复js/ts功能
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"minapp-vscode.disableAutoConfig": true,
"javascript.implicitProjectConfig.experimentalDecorators": true,
"editor.maxTokenizationLineLength": 200000
}
Суммировать
обо мне
Для получения дополнительных статей по технической тематике обратите внимание на общедоступный аккаунт «Front-end Girls' School» и присоединитесь к «Fairy Group Front-end».
Если это вам поможет, пришлите мне звездочку (づ ̄3 ̄)づ╭❤~
Пожалуйста, свяжитесь с автором для перепечатки!