предисловие
В этой статье систематически разбирается обычное использование vue-cli3 для сборки проектов, цель — дать вам возможность быстро освоить возможность независимой сборки проектов vue. Вы будете знать следующие точки знаний:
- Как установить плагины проекта
- Добавить поддержку браузера
- Как настроить общие глобальные переменные scss/стилуса
- Как интегрировать сторонние фреймворки, такие как Elementui, и внедрить их по требованию
- Настроить одно/многостраничный
- Как настроить пользовательские переменные среды
- Как настроить собственный веб-пакет в vue.config.js
- развертывание проекта vue
иллюстрировать
В конце этой статьи для справки будет предоставлен файл конфигурации для всех упомянутых выше функций.
карта разума
1. Установите плагин проекта
vue add @vue/cli-plugin-eslint
# 或
vue add xjFile
vue add предназначен для установки и вызова плагинов Vue CLI. Для обычных пакетов npm мы по-прежнему можем (в зависимости от выбранного пакета npm) использовать менеджер пакетов. Наконец, вы можете выполнить пользовательскую настройку веб-пакета в vue.config.js.
2. Добавьте поддержку браузера
- browserslist
Мы можем указать диапазон целевых браузеров для проекта через поле browserslist в файле package.json или в отдельном файле .browserslistrc. Это значение будет использоваться @babel/preset-env и Autoprefixer, чтобы определить, какие функции JavaScript следует транспилировать и какие префиксы браузера CSS добавить.
Например:
// .browserslistrc
> 1%
last 2 versions
Чтобы получить больше списков браузеров, вы можете переместитьbrowserslist
- Polyfill
По умолчанию cli передает useBuiltIns: 'usage' в @babel/preset-env, чтобы он автоматически определял необходимые полифиллы на основе особенностей языка, присутствующих в исходном коде. Это гарантирует, что количество полифилов в конечном пакете сведено к минимуму. Но если для одной из зависимостей требуется специальный полифилл, Babel не может его обнаружить по умолчанию. Мы можем решить такие задачи тремя способами:
- Добавьте зависимости к параметру transpileDependencies в vue.config.js.
// vue.config.js
module.exports = {
// 默认情况下 babel-loader 会忽略所有 node_modules 中的文件。如果你想要通过 Babel 显式转译一个依赖,可以在这个选项中列出来
transpileDependencies: ['glob']
}
- Необходимые полифиллы могут быть предварительно включены с помощью опции полифиллов в @vue/babel-preset-app.
// babel.config.js
module.exports = {
presets: [
['@vue/app', {
polyfills: [
'es6.promise',
'es6.symbol'
]
}]
]
}
- Используйте useBuiltIns: 'entry', а затем добавьте import '@babel/polyfill' в файл входа, проблема с этим методом заключается в том, что он увеличит размер пакета.
3. Настройте общие глобальные переменные scss/стилуса.
Для scss вы можете использовать следующие методы для открытия:
// vue.config.js
module.exports = {
css: {
loaderOptions: {
sass: {
// 这里假设你有 `src/variables.scss` 文件
data: `@import "~@/variables.scss";`
}
}
}
}
Для стилуса, который я лично проверял и использовал вышеописанный способ недействителен, чего можно добиться следующими способами:
vue add style-resources-loader
// vue.config.js
const path = require('path')
module.exports = {
pluginOptions: {
'style-resources-loader': {
'patterns': [
path.resolve(__dirname, 'src/styles/abstracts/*.styl'),
]
}
}
}
4. Интеграция сторонних фреймворков, таких как elementUI, и внедрение по запросу.
- Установить компонент Babel-плагина
npm install babel-plugin-component -D
- Настройте babel.config.js
module.exports = {
presets: [
'@vue/app',
],
plugins: [
[
"component",
{
"libraryName": "element-ui",
"styleLibraryName": "theme-chalk"
}
]
]
}
На этом этапе компоненты элементов могут быть введены по мере необходимости для оптимизации объема проекта.
5. Настройте одно/многостраничный
Vue-cli по умолчанию имеет одностраничную структуру, и мы можем настроить проект на несколько страниц через файл конфигурации:
// vue.config.js
const path = require('path')
module.exports = {
// 单/多页面
pages: {
index: {
// page 的入口
entry: 'src/home/main.js',
// 模板来源
template: 'public/index.html',
// 在 dist/index.html 的输出
filename: 'index.html',
// 当使用 title 选项时,
// template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
title: 'Your Web For PC',
// 在这个页面中包含的块,默认情况下会包含
// 提取出来的通用 chunk 和 vendor chunk。
// chunks: ['chunk-vendors', 'chunk-common', 'index']
},
// 当使用只有入口的字符串格式时,
// 模板会被推导为 `public/subpage.html`
// 并且如果找不到的话,就回退到 `public/index.html`。
// 输出文件名会被推导为 `subpage.html`。
// subpage: 'src/subpage/main.js'
},
}
6. Как настроить пользовательские переменные среды
Вы можете указать переменные среды, заменив следующие файлы в корневом каталоге вашего проекта:
.env # 在所有的环境中被载入
.env.local # 在所有的环境中被载入,但会被 git 忽略
.env.[mode] # 只在指定的模式中被载入
.env.[mode].local # 只在指定的模式中被载入,但会被 git 忽略
следующим образом:
// .env.local
APPID=123
VUE_APP_SECRET=secret
Если вы хотите использовать переменные среды в клиентском коде, имя переменной начинается с VUE_APP_, а определенные переменные среды можно получить следующим образом:
console.log(process.env.VUE_APP_SECRET)
7. Как настроить собственный веб-пакет в vue.config.js
Мы можем использовать связанные вызовы, поддерживаемые cli, или пользовательские вызовы:
// vue-cli内部webpack配置
chainWebpack: config => {
// 设置快捷目录别名
config.resolve.alias.set('utils',resolve('../utils'))
// 修改静态资源打包方式,下例为超过10k才用文件导入的方式,否则为base64.默认为4k
// config.module
// .rule('images')
// .use('url-loader')
// .loader('url-loader')
// .tap(options => Object.assign(options, { limit: 10240 }))
},
// webpack自定义配置
configureWebpack: config => {
if (process.env.NODE_ENV === 'production') {
// 为生产环境修改配置...
} else {
// 为开发环境修改配置...
}
}
7. Развертывание проекта Vue
Здесь мы используем сценарий оболочки для развертывания, конечно, каждый может также выполнить развертывание самостоятельно:
#!/usr/bin/env sh
# 当发生错误时中止脚本
set -e
# 构建
npm run build
# cd 到构建输出的目录
cd dist
git init
git add -A
git commit -m 'deploy'
git push -f git@bitbucket.org:<USERNAME>/<USERNAME>.bitbucket.io.git master
cd -
Наконец, последний относительно полный список настроек:
// vue.config.js
// 自定义vue配置
const path = require('path');
const resolve = dir => path.join(__dirname, dir);
// mock数据
const mockData = require('./mock/test.json');
module.exports = {
// 基本路径
publicPath: './',
// 输出文件目录
// outputDir: 'dist',
// eslint-loader 是否在保存的时候检查
// lintOnSave: true,
// 单/多页面
pages: {
index: {
// page 的入口
entry: 'src/main.js',
// 模板来源
template: 'public/index.html',
// 在 dist/index.html 的输出
filename: 'index.html',
// 当使用 title 选项时,
// template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
title: 'OpenCoder For PC',
// 在这个页面中包含的块,默认情况下会包含
// 提取出来的通用 chunk 和 vendor chunk。
// chunks: ['chunk-vendors', 'chunk-common', 'index']
},
// 当使用只有入口的字符串格式时,
// 模板会被推导为 `public/subpage.html`
// 并且如果找不到的话,就回退到 `public/index.html`。
// 输出文件名会被推导为 `subpage.html`。
// subpage: 'src/subpage/main.js'
},
// css相关配置
css: {
// 是否使用css分离插件 ExtractTextPlugin
extract: true,
// 开启 CSS source maps?
sourceMap: false,
// css预设器配置项
loaderOptions: {
// stylus: {
// // @/ 是 src/ 的别名
// // 所以这里假设你有 `src/variables.stylus` 这个文件, 不过目前测试无效
// data: `@import "~@/style/variables.styl";`
// }
},
// 启用 CSS modules for all css / pre-processor files.
modules: false
},
pluginOptions: {
// 共享变量
'style-resources-loader': {
preProcessor: 'stylus',
patterns: [
//这个是加上自己的路径,
//注意:试过不能使用别名路径
resolve('src/style/variables.styl'),
]
}
},
devServer: {
// 端口
port: 3000,
// 配置代理
proxy: {
'^/api': {
target: 'http://localhost:8081',
ws: true,
changeOrigin: true
},
'^/data': {
target: 'http://localhost:3000'
}
},
// mock
before(app){
app.get('/api/getUser',(req,res,next)=>{
res.json(mockData);
})
}
},
// vue-cli内部webpack配置
chainWebpack: config => {
// 设置快捷目录别名
config.resolve.alias.set('utils',resolve('../utils'))
// 修改静态资源打包方式,下例为超过10k才用文件导入的方式,否则为base64.默认为4k
// config.module
// .rule('images')
// .use('url-loader')
// .loader('url-loader')
// .tap(options => Object.assign(options, { limit: 10240 }))
},
// webpack配置
configureWebpack: config => {
if (process.env.NODE_ENV === 'production') {
// 为生产环境修改配置...
} else {
// 为开发环境修改配置...
}
}
}
// babel.config.js
module.exports = {
presets: [
'@vue/app',
],
plugins: [
[
"component",
{
"libraryName": "element-ui",
"styleLibraryName": "theme-chalk"
}
]
]
}
// .browserslistrc
> 1%
last 2 versions
// package.json
{
"name": "pc",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"build:serve": "serve -s dist",
"lint": "vue-cli-service lint",
"test:unit": "vue-cli-service test:unit"
},
"dependencies": {
"clipboard": "^2.0.4",
"core-js": "^2.6.5",
"element-ui": "^2.9.1",
"register-service-worker": "^1.6.2",
"serve": "^11.0.2",
"vue": "^2.6.10",
"vue-router": "^3.0.3",
"vuex": "^3.0.1"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^3.8.0",
"@vue/cli-plugin-eslint": "^3.8.0",
"@vue/cli-plugin-pwa": "^3.8.0",
"@vue/cli-plugin-unit-mocha": "^3.8.0",
"@vue/cli-service": "^3.8.0",
"@vue/test-utils": "1.0.0-beta.29",
"babel-eslint": "^10.0.1",
"babel-plugin-component": "^1.1.1",
"chai": "^4.1.2",
"eslint": "^5.16.0",
"eslint-plugin-vue": "^5.0.0",
"style-resources-loader": "^1.2.1",
"stylus": "^0.54.5",
"stylus-loader": "^3.0.2",
"vue-cli-plugin-style-resources-loader": "^0.1.3",
"vue-template-compiler": "^2.6.10"
}
}
В этой статье рассматривается базовый процесс настройки проекта cli3.Мы можем построить наш собственный проект в соответствии с этой картой ума.
Ссылка в этой статьеофициальный сайт vue-cli
Если вы хотите получить исходный файл карты разума в высоком разрешении, отсканируйте общедоступную учетную запись ниже:
больше рекомендаций
-
9012 научит вас, как использовать gulp4 для разработки шаблонов проекта.
-
Как написать свой собственный js-фреймворк менее чем за 200 строк кода)
-
Использование Angular8 и API карты Baidu для разработки «списка туров»
-
js реализация базового алгоритма поиска и тест производительности при 1,7 миллионах данных
-
Vue advanced advanced series — играйте с vue и vuex с машинописным текстом
-
Три года в авангарде, расскажите о 5 самых стоящих книгах, которые стоит прочитать