如何將項目升級到vue-cli3

這篇文章將為大家詳細講解有關如何將項目升級到vue-cli3,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

為普安等地區用戶提供了全套網頁設計制作服務,及普安網站建設行業解決方案。主營業務為成都做網站、網站建設、普安網站設計,以傳統方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業、用心的態度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

一. 原以為升級vue-cli3的路線是這樣的:

創建vue-cli3項目,按原有項目的配置選好各項配置

如何將項目升級到vue-cli3

遷移目錄

src->src
static->public

對比新舊 package.json ,然后 yarn install ,完畢。

然鵝... 運行項目,報錯 You are using the runtime-only build of Vue......如何將項目升級到vue-cli3 如何將項目升級到vue-cli3

然后去查了下舊項目的相關字眼文件:

如何將項目升級到vue-cli3

噢,原來是vue-cli3的webpack相關文件都得自己寫。于是乎根據官網的指引,在根目錄創建了 vue.config.js

此時粗略配置:

 chainWebpack: config => {
 config.module
  .rule('vue')
  .use('vue-loader')
  .loader('vue-loader')
  .tap(options => {
  options.compilerOptions.preserveWhitespace = false
  return options
  })
 config.resolve.alias
  .set('vue$', 'vue/dist/vue.esm.js')
  .set('@', resolve('src'))
 }

二. 此時勉強能跑起來,但后續遇到了這些坑:

#1 public 靜態資源不加載

```
 const CopyWebpackPlugin = require('copy-webpack-plugin')
 // ....
 // 確保靜態資源
 config.resolve.extensions = ['.js', '.vue', '.json', '.css']
 config.plugins.push(
 new CopyWebpackPlugin([{ from: 'public/', to: 'public' }]),
)
```

#2 Chrome 查看樣式時無法找到源文件

如何將項目升級到vue-cli3

原因: vue-cli3 里默認關閉 sourceMap,樣式都會被打包到首頁。 解決: 需要自己配置打開

 // 讓樣式找到源
 css: {
 sourceMap: true
 },

#3 生產環境的 debugerconsole 無法通過 uglifyjs-webpack-pluginuglify-es 剔除

原因:不支持 es6 , 需要配置 babel ( uglify-es 按配置填會顯示不存在選項)

解決:插件terser

```
const TerserPlugin = require('terser-webpack-plugin')
if (process.env.NODE_ENV === 'production') {
 // 為生產環境修改配置...
 new TerserPlugin({
 cache: true,
 parallel: true,
 sourceMap: true, // Must be set to true if using source-maps in production
 terserOptions: {
  compress: {
  drop_console: true,
  drop_debugger: true
  }
 }
 })
} else {
 // 為開發環境修改配置...
}
```

#4 無法在 config 目錄下配置不同環境的 API_URL ,用于跨域請求

原因: vue-cli3 中需要遵循變量規則,使用 VUE_APP 前綴

官方規則: 在客戶端側代碼中使用環境變量

解決:于是你需要創建如下幾個文件:

如何將項目升級到vue-cli3

.local 也可以加在指定模式的環境文件上,比如 .env.development.local 將會在 development 模式下被載入,且被 git 忽略。

文件內容:

// env.development.local
NODE_ENV = development
VUE_APP_URL = http://xxx.x.xxx/

#5 vue-cli代理轉發控制臺反復打印 "WebSocket connection to'ws://localhost..."

如何將項目升級到vue-cli3

解決方法:

vue.config.js 中配置 devServer.proxywsfalse

結合上述兩步,相對應的 vue.config.js ,需要這么寫:

const env = process.env.NODE_ENV
let target = process.env.VUE_APP_URL

const devProxy = ['/api', '/'] // 代理
// 生成代理配置對象
let proxyObj = {};
devProxy.forEach((value, index) => {
 proxyObj[value] = {
 ws: false,
 target: target,
 // 開啟代理:在本地會創建一個虛擬服務端,然后發送請求的數據,并同時接收請求的數據,這樣服務端和服務端進行數據的交互就不會有跨域問題
 changeOrigin: true,
 pathRewrite: {
  [`^${value}`]: value
 }
 };
})
// ....
devServer: {
 open: true,
 host: 'localhost',
 port: 8080,
 proxy: proxyObj
 }

最后貼上我的 vue.config.js

const CopyWebpackPlugin = require('copy-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')

const path = require('path')
const env = process.env.NODE_ENV
let target = process.env.VUE_APP_URL

const devProxy = ['/api', '/'] // 代理

// 生成代理配置對象
let proxyObj = {};
devProxy.forEach((value, index) => {
 proxyObj[value] = {
 ws: false,
 target: target,
 // 開啟代理:在本地會創建一個虛擬服務端,然后發送請求的數據,并同時接收請求的數據,這樣服務端和服務端進行數據的交互就不會有跨域問題
 changeOrigin: true,
 pathRewrite: {
  [`^${value}`]: value
 }
 };
})

function resolve (dir) {
 return path.join(__dirname, dir)
}

module.exports = {
 publicPath: '/',
 // 讓樣式找到源
 css: {
 sourceMap: true
 },
 configureWebpack: config => {
 // 確保靜態資源
 config.resolve.extensions = ['.js', '.vue', '.json', '.css']
 config.plugins.push(
  new CopyWebpackPlugin([{ from: 'public/', to: 'public' }]),
 )
 if (process.env.NODE_ENV === 'production') {
  // 為生產環境修改配置...
  new TerserPlugin({
  cache: true,
  parallel: true,
  sourceMap: true, // Must be set to true if using source-maps in production
  terserOptions: {
   compress: {
   drop_console: true,
   drop_debugger: true
   }
  }
  })
 } else {
  // 為開發環境修改配置...
 }

 },
 chainWebpack: config => {
 config.module
  .rule('vue')
  .use('vue-loader')
  .loader('vue-loader')
  .tap(options => {
  options.compilerOptions.preserveWhitespace = false
  return options
  })
 config.resolve.alias
  .set('vue$', 'vue/dist/vue.esm.js')
  .set('@', resolve('src'))
 },
 devServer: {
 open: true,
 host: 'localhost',
 port: 8080,
 proxy: proxyObj
 }
}

三. Eslint相關報錯及配置

如何將項目升級到vue-cli3

module.exports = {
 root: true,
 env: {
 node: true
 },
 'extends': [
 'plugin:vue/essential',
 '@vue/standard'
 ],
 rules: {
 'generator-star-spacing': 'off',
 'object-curly-spacing': 'off',
 // 最常出現的錯誤
 'no-unused-vars': 'off',
 // 最常出現的錯誤
 "vue/no-use-v-if-with-v-for": ["error", {
  "allowUsingIterationVar": true
 }],
 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
 },
 parserOptions: {
 parser: 'babel-eslint'
 }
}

最后的最后,跑個項目

yarn serve

如何將項目升級到vue-cli3

yarn build

如何將項目升級到vue-cli3

關于“如何將項目升級到vue-cli3”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

網頁標題:如何將項目升級到vue-cli3
URL地址:http://m.kartarina.com/article28/pgoscp.html

成都網站建設公司_創新互聯,為您提供網站制作移動網站建設外貿網站建設GoogleApp設計網站內鏈

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發
主站蜘蛛池模板: 中文精品无码中文字幕无码专区| 国产丝袜无码一区二区三区视频 | 免费A级毛片无码A| 人妻精品久久无码区| 国产在线无码视频一区| 亚洲av无码国产精品夜色午夜 | 国产激情无码一区二区app| 亚洲精品无码久久毛片波多野吉衣| 国产精品无码一区二区在线观| 免费无码黄网站在线看| 精品久久久久久中文字幕无码 | 中文字幕av无码一二三区电影 | 无码av人妻一区二区三区四区| 免费一区二区无码视频在线播放| 亚洲AV无码1区2区久久| 日韩精品无码永久免费网站| 免费A级毛片无码A∨免费| 亚洲精品无码精品mV在线观看| 国产成年无码久久久久下载| 无码国产午夜福利片在线观看| 精品无码综合一区| 国产精品无码2021在线观看| 精品无码人妻夜人多侵犯18 | 亚洲2022国产成人精品无码区| 九九久久精品无码专区| 无码av中文一区二区三区桃花岛| 久久午夜无码鲁丝片秋霞| 国产AV无码专区亚洲Av| 国产高清无码毛片| 亚洲AV无码乱码在线观看| 人妻丰满熟妇A v无码区不卡| 中文有码无码人妻在线| 精品国产a∨无码一区二区三区 | 亚洲日韩精品一区二区三区无码 | 亚洲一区精品无码| 亚洲精品无码av人在线观看| 中文字幕久无码免费久久| 精品无码久久久久久久久久| 久久中文精品无码中文字幕| 亚洲AV无码一区二区三区国产| 亚洲AV中文无码乱人伦在线视色|