Мой личный блог:Оригинальная ссылка
Vue-cli 3.0 использовался в последних проектах разработки.Можно сказать, что пользовательский опыт очень хороший.Шаблоны более настраиваемые, а конфигурация более лаконичная. Ниже приводится краткое изложение некоторого опыта в процессе подачи заявки.
Новый проект
# 安装
npm install -g @vue/cli
# 新建项目
vue create my-project
# 项目启动
npm run serve
# 打包
npm run build
Упакованный файл вводит предварительную загрузку (preload/prefetch
), вводится при включении подключаемого модуля PWA.manifest/icon
ссылка и встраивает манифест среды выполнения / фрагмента веб-пакета для лучшей производительности.
Функциональная конфигурация
Выбор функций
Версия 3.0 включаетПредустановленная конфигурация по умолчаниюа такжеПользовательская конфигурация, после того как пользователь настроит конфигурацию, он спросит, сохранить ли текущую функцию конфигурации в качестве предустановленного значения будущей конфигурации проекта, чтобы в следующий раз ее можно было использовать напрямую без перенастройки.
Конфигурация пользовательских функций включает следующие функции:
- TypeScript
- Progressive Web App (PWA) Support
- Router
- Vuex
- CSS Pre-processors
- Linter / Formatter
- Unit Testing
- E2E Testing
Различные функции могут быть настроены в соответствии с размером проекта и функциональным опытом,空格键
поставить/снять отметку,按a键
выбрать все/не выбирать все,按i键
Отмените выбор выбранного элемента,上下键
Переместить выделение вверх или вниз.
Конфигурация сведений о функциях
После выбора функции запросит более подробную настройку,
- Машинопись:
- Использовать ли синтаксис компонента в стиле класса:
Use class-style component syntax?
- Использовать ли babel для побега:
Use Babel alongside TypeScript for auto-detected polyfills?
- Использовать ли синтаксис компонента в стиле класса:
- Препроцессоры CSS:
- Выберите тип предварительной обработки CSS:
Pick a CSS pre-processor
- Выберите тип предварительной обработки CSS:
- Linter / Formatter
- Выберите тип спецификации Linter/Formatter:
Pick a linter / formatter config
- Выберите режим lint, проверьте при сохранении/отметьте при отправке:
Pick additional lint features
- Выберите тип спецификации Linter/Formatter:
- Testing
- Выберите метод модульного тестирования
- Выберите метод тестирования E2E
- Выберите, где хранить пользовательские конфигурации, такие как Babel, Pustcss, Eslint и т. Д.
Where do you prefer placing config for Babel, PostCSS, ESLint, etc.?
Пользовательская конфигурация Vue.config.js
vue.config.js полная конфигурация по умолчанию
module.exports = {
// 基本路径
baseUrl: '/',
// 输出文件目录
outputDir: 'dist',
// eslint-loader 是否在保存的时候检查
lintOnSave: true,
// use the full build with in-browser compiler?
// https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only
compiler: false,
// webpack配置
// see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
chainWebpack: () => {},
configureWebpack: () => {},
// vue-loader 配置项
// https://vue-loader.vuejs.org/en/options.html
vueLoader: {},
// 生产环境是否生成 sourceMap 文件
productionSourceMap: true,
// css相关配置
css: {
// 是否使用css分离插件 ExtractTextPlugin
extract: true,
// 开启 CSS source maps?
sourceMap: false,
// css预设器配置项
loaderOptions: {},
// 启用 CSS modules for all css / pre-processor files.
modules: false
},
// use thread-loader for babel & TS in production build
// enabled by default if the machine has more than 1 cores
parallel: require('os').cpus().length > 1,
// 是否启用dll
// See https://github.com/vuejs/vue-cli/blob/dev/docs/cli-service.md#dll-mode
dll: false,
// PWA 插件相关配置
// see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
pwa: {},
// webpack-dev-server 相关配置
devServer: {
open: process.platform === 'darwin',
host: '0.0.0.0',
port: 8080,
https: false,
hotOnly: false,
proxy: null, // 设置代理
before: app => {}
},
// 第三方插件配置
pluginOptions: {
// ...
}
}
установить прокси
# string
module.exports = {
devServer: {
proxy: '<url>'
}
}
# Object
module.exports = {
devServer: {
proxy: {
'/api': {
target: '<url>',
ws: true,
changeOrigin: true
},
'/foo': {
target: '<other_url>'
}
}
}
}
включить DLL
включитьdll
После этого файлы нашей динамической библиотеки генерируются путем упаковки каждый разvendor
из[chunkhash]
значение будет одинаковым, его значение может бытьtrue/false
, также можно сформулировать特定的代码库
.
module.exports = {
dll: true
}
module.exports = {
dll: [
'dep-a',
'dep-b/some/nested/file.js'
]
}
статический путь к ресурсу
-
относительный путь
- Пути статических ресурсов начинаются с
@
Начало представлять<projectRoot>/src
- Пути статических ресурсов начинаются с
~
в начале вы можете импортироватьnode modules
ресурсы внутри
- Пути статических ресурсов начинаются с
-
public
Ссылки на статические ресурсы в папках# 在 public/index.html中引用静态资源 <%= webpackConfig.output.publicPath %> <link rel="shortcut icon" href="<%= webpackConfig.output.publicPath %>favicon.ico"> # vue templates中,需要在data中定义baseUrl <template> <img :src="`${baseUrl}my-image.png`"> </template> <script> data () { return { baseUrl: process.env.BASE_URL } } </script>
изменение конфигурации веб-пакета
использоватьwebpack-chain
Измените конфигурацию, связанную с веб-пакетом, настоятельно рекомендуется сначала ознакомиться с ней.webpack-chainа такжеисходный код vuecli, чтобы лучше понять элементы конфигурации этой опции.
- Обработка конфигурации для модулей
// vue.config.js
module.exports = {
chainWebpack: config => {
config.module
.rule('js')
.include
.add(/some-module-to-transpile/) // 要处理的模块
}
}
- Изменить конфигурацию загрузчика webpack
// vue.config.js
module.exports = {
chainWebpack: config => {
config.module
.rule('scss')
.use('sass-loader')
.tap(options =>
merge(options, {
includePaths: [path.resolve(__dirname, 'node_modules')],
})
)
}
}
- Изменить конфигурацию плагина webpack
// vue.config.js
module.exports = {
chainWebpack: config => {
config
.plugin('html')
.tap(args => {
return [/* new args to pass to html-webpack-plugin's constructor */]
})
}
}
например: Этот проект небольшой, только дляuglifyjsНезначительные модификации для оптимизации конфигурации позже, если будут продолжать добавлять.
chainWebpack: config => {
if (process.env.NODE_ENV === 'production') {
config
.plugin('uglify')
.tap(([options]) =>{
// 去除 console.log
return [Object.assign(options, {
uglifyOptions: { compress: {
drop_console : true,
pure_funcs: ['console.log']
}}
})]
})
}
}
Глобальные настройки переменной
Создайте следующие проекты в корневом каталоге проекта:
.env # 在所有环节中执行
.env.local # 在所有环境中执行,git会ignored
.env.[mode] # 只在特定环境执行( [mode] 可以是 "development", "production" or "test" )
.env.[mode].local # 在特定环境执行, git会ignored
.env.development # 只在生产环境执行
.env.production # 只在开发环境执行
Настройте пары ключ-значение в файле:
# 键名须以VUE_APP开头
VUE_APP_SECRET=secret
Доступ в проекте:
console.log(process.env.VUE_APP_SECRET)
в таком проектеprocess.env.VUE_APP_SECRET
будетsecret
Заменены.
vue-cli 3 in terms of project performance has been quite a friendship, qualitative and private ownership is particularly strong, various configuration is particularly intimate, private preset can develop according to the project size and characteristics of the pre-build project in terms of efficiency значительно улучшилась.
заполнить яму
# 解决办法1: 在package.json中指定@babel/preset-stage-2版本
"devDependencies": {
"@babel/preset-stage-2": "7.0.0-beta.44",
...
}
# 解决办法2: 修改.babelrc
{
"presets": [
["@babel/preset-env", {
"targets": {
"browsers": [
"> 5%",
"last 2 versions",
"not ie <= 8"
]
},
"modules": false,
"exclude": [
"transform-regenerator"
]
}],
["@babel/preset-stage-2", {
"useBuiltIns": true,
"decoratorsLegacy": true
}]
],
"plugins": [
]
}