vue-cli-service的參數配置過程
vue-cli-service的參數配置
vue-cli-service serve
Usage: vue-cli-service serve [options]
Options:
–open 服務器啟動時打開瀏覽器
–copy 將URL復制到服務器啟動時的剪貼板 (直接到瀏覽器去粘貼就OK瞭 http://localhost:8080/)
–mode 指定環境模式 (默認: development)
–host host 地址 (default: 0.0.0.0)
–port 端口號 (default: 8080)
–https 使用https (default: false)
vue-cli-service build
Usage: vue-cli-service build [options] [entry|pattern]
Options:
–mode 指定環境模式 (default: production)
–dest 指定輸出目錄 (default: dist)
–modern 構建兩個版本的 js 包:一個面向支持現代瀏覽器的原生 ES2015+ 包,以及一個針對其他舊瀏覽器的包。
–target 允許您以項目庫或Web組件的形式在項目內部構建任何組件 app | lib | wc | wc-async (default: app) ???
–name lib或者web組件庫的名稱 (default: "name" in package.json or entry filename)
–no-clean 在構建項目之前不要刪除輸出目錄(dist)
–report 生成report.html以幫助分析包內容
–report-json 生成report.json來幫助分析包內容
–watch 監聽 – 當有改變時 自動重新打包~
vue-cli-service inspect
使用它vue-cli-service inspect來檢查Vue CLI項目中的webpack配置。有關更多詳細信息,請參閱檢查Webpack配置
Usage: vue-cli-service inspect [options] [...paths]
Options:
–mode 指定環境模式 (default: development)
vue-cli中執行的vue-cli-service
最近又整回vue去瞭,不說瞭,還是腳手架先整吧。
假設你已經通過vue create vue-base
有瞭vue-base 項目
然後我看到
"scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", "lint": "vue-cli-service lint" },
這裡執行的是vue-cli-service
開心 又來活兒瞭
我好奇它的webpack基礎配置是什麼?就是我本地項目文件不做任何vue.config.js的配置,它能實現什麼?
vue-cli-service 其實執行的是 node_modules/.bin/vue-cli-service
最終是執行瞭@vue/cli-service
const Service = require('../lib/Service') const service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd())
這裡看到首先去new Service,這裡初始化配置
然後執行瞭
service.run(command, args, rawArgv).catch(err => { error(err) process.exit(1) })
run函數裡面先執行瞭this.init 把默認配置初始化好
然後執行瞭command 這裡以server為例,去執行瞭 lib/commands下面對應的serve.js文件
可以看到這裡面也有一些配置,覆蓋瞭之前的初始化的配置
lib/commands/serve.js
const defaults = { host: '0.0.0.0', port: 8080, https: false }
如何更改vue-cli-service裡面默認的端口號呢?
把啟動命令更改為vue-cli-service serve –port 7001
後續可以看到在這裡把初始化的很多參數加到 webpack配置裡面來
Service.js文件裡面
loadUserOptions 這個方法裡面獲取瞭用戶的vue.config.js命名的文件信息或者是package.json 裡面 vue字段的信息
關於配置 Service.js這裡
const { defaults, validate } = require('./options') options.js export default {}
出來一份配置
說一下這個文件裡面引入的@vue/cli-shared-utils 就像一個校驗一樣,這裡處理的很棒!
const builtInPlugins = [ './commands/serve', './commands/build', './commands/inspect', './commands/help', // config plugins are order sensitive './config/base', './config/css', './config/prod', './config/app' ].map(idToPlugin) if (inlinePlugins) { plugins = useBuiltIn !== false ? builtInPlugins.concat(inlinePlugins) : inlinePlugins } else { const projectPlugins = Object.keys(this.pkg.devDependencies || {}) .concat(Object.keys(this.pkg.dependencies || {})) .filter(isPlugin) .map(id => { if ( this.pkg.optionalDependencies && id in this.pkg.optionalDependencies ) { let apply = () => {} try { apply = require(id) } catch (e) { warn(`Optional dependency ${id} is not installed.`) } return { id, apply } } else { return idToPlugin(id) } }) plugins = builtInPlugins.concat(projectPlugins) }
裡面有一個這個對象,配置各個命令和配置,看起來是做瞭prod和base的區分配置 後面是做瞭一個合並
prod.js裡面看到
首先是通過webpack-chain 鏈接的各個配置
module.exports = (api, options) => { api.chainWebpack(webpackConfig => { if (process.env.NODE_ENV === 'production') { production 環境 webpackConfig .mode('production') //瞧這裡設置瞭mode .devtool(options.productionSourceMap ? 'source-map' : false) // keep module.id stable when vendor modules does not change webpackConfig .plugin('hash-module-ids') .use(require('webpack/lib/HashedModuleIdsPlugin'), [{ hashDigest: 'hex' }]) // disable optimization during tests to speed things up if (process.env.VUE_CLI_TEST) { webpackConfig.optimization.minimize(false) } } }) }
在base.js
然後你就看到瞭這麼些的默認配置
webpackConfig .mode('development') .context(api.service.context) .entry('app') .add('./src/main.js') .end() .output .path(api.resolve(options.outputDir)) .filename(isLegacyBundle ? '[name]-legacy.js' : '[name].js') .publicPath(options.publicPath)
基礎的entry ,output
alias .set('@', api.resolve('src')) .set( 'vue$', options.runtimeCompiler ? 'vue/dist/vue.esm.js' : 'vue/dist/vue.runtime.esm.js' )
配置瞭別名 @指向項目src目錄
以下是在 vue 2的項目中,一旦換成 vue 3的項目就沒瞭,所以放在瞭try catch中
這裡可以看到對, .vue文件啟用瞭cache-loader,緩存,啟用瞭vue-loader 這個來轉換vue文件
繼續往下處理瞭images、svg、media、fonts文件
很意外的看到瞭關於.pug後綴文件的處理,可能是其它包裡面的?這裡沒有仔細去看瞭
最後
增加瞭terser默認的內置壓縮工具包,做壓縮
這裡的配置有一個terserOptions.js文件
更改的
https://cli.vuejs.org/zh/config/#vue-config-js
總結
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Vue CLI中模式與環境變量的深入詳解
- vue單頁面改造多頁面應用詳解第1/2頁
- webpack項目中使用vite加速的兼容模式詳解
- vue項目啟動命令個人學習記錄
- Vue生產和開發環境如何切換及過濾器的使用