1. 程式人生 > 程式設計 >vue專案檢視vue版本及cli版本的實現方式

vue專案檢視vue版本及cli版本的實現方式

檢視cli版本,執行如下:

vue -V

檢視vue版本

npm list vue

補充知識:vue老專案升級vue-cli3.0問題總結

升級步驟

1、 刪除原vue-cli並安裝vue-cli3.0

2、刪除新專案中src下的內容,把原專案中src目錄覆蓋到新專案中

3、把router從目錄資料夾改為檔案,src/router/index.js提高一層變成src/router.js

4、 我的專案中src已經分為了views和components所以無需修改,如果不是這個結構需要自己區分下

5、將原專案的index.html及favicon.ico覆蓋到新專案的public中

6、 將原專案的static資料夾拷貝到新專案的public中

7、 修改package.json檔案,保持和原有專案一致即可

8、 建立並配置vue.config.js檔案

刪除命令:

npm uninstall vue-cli -g

安裝@vue/cli命令:

npm install -g @vue/cli

我在這裡省略安裝流程,掘金上已經有很多文章了,下面說下會遇到的問題:

1、找不到vue檔案

CMD中的報錯

These dependencies were not found:

* @/views/index/index in ./src/router.js

* @/views/index/otherIndex in ./src/router.js

To install them,you can run: npm install --save @/views/index/index @/views/index/other

頁面上的報錯

./src/router.js
Module not found:
Error: Can't resolve '@/views/index/index' in 'D:\VUE\haigui-proxy\src'
這種報錯是說明檔案路徑錯誤沒有找到檔案,因為在原專案中設定了“@”也就是alias(別名),也有可能在原專案中設定了extensions(可以省略副檔名),所以需要在新專案的vue.config.js中設定如下內容:
const path = require('path'); // vue.config.js頂部
const resolve = (dir) => path.join(__dirname,dir);
module.exports = {
 configureWebpack: config => {
 Object.assign(config,{
  resolve: {
  extensions: ['.js','.vue','.json'],// 可以省略字尾名
  alias: { // 別名,在require的時候,可以使用這些別名,來縮短路徑的長度
   '@': path.resolve(__dirname,'./src'),'@c': path.resolve(__dirname,'./src/components')
  }
  }
 });
 }
}

2、找不到image圖片

Module not found:

Error: Can't resolve '../../../static/image/avatar_gray.jpg' in 'D:\VUE\haigui-proxy\src\views\index'

當把原專案的src和static拷貝到新專案後,就會出現圖片路徑不對的問題,網上很多有關vue-cli3.0配置的文章都說的是把原專案的static直接拷貝到新專案的public中,其實這是不對,官方給出的原因是:

任何放置在 public 資料夾的靜態資源都會被簡單的複製,而不經過 webpack。需要通過絕對路徑來引用它們。

例如,目錄為public/static/image,image裡面存放各種圖片:

引入圖片logo.png:

<img src="/static/image/logo.png" >

在 css 中 設定背景圖片:

.bg {
background: url('/satic/image/bg.jpg');
}

注意:

public 目錄提供的是一個應急手段,當你通過絕對路徑引用它時,留意應用將會部署到哪裡。如果你的應用沒有部署在域名的根部,那麼你需要為你的 URL 配置 publicPath 字首。

何時使用 public 資料夾

你需要在構建輸出中指定一個檔案的名字。

你有上千個圖片,需要動態引用它們的路徑。

有些庫可能和 webpack 不相容,這時你除了將其用一個獨立的 標籤引入沒有別的選擇。

通過 webpack 的處理好處:

指令碼和樣式表會被壓縮且打包在一起,從而避免額外的網路請求。

檔案丟失會直接在編譯時報錯,而不是到了使用者端才產生 404 錯誤。

最終生成的檔名包含了內容雜湊,因此你不必擔心瀏覽器會快取它們的老版本。

public 目錄提供的是一個應急手段,當你通過絕對路徑引用它時,留意應用將會部署到哪裡。

assets資料夾就是用來放置經過webpack處理的資源的

需要使用相對路徑引入:

<!-- 具體根據目錄結構來 -->

<img src="../assets/images/logo-black.png">

img動態路徑:

<img :src="imgurl">
data () {
return { 
imgurl: require("../assets/images/gou.png") 
}
}

css 背景圖:

.login-wrapper {
 background: url('../../assets/images/bg.jpg');
}

參考:官方解釋

3、scss全域性變數的配置

Module build failed (from ./node_modules/sass-loader/lib/loader.js):
Undefined variable. 955 │ 
 border-right: 1px solid $borderColor;  
  ^^^^^^^^^^^^
root stylesheet in D:\VUE\haigui-proxy\src\views\index\index.vue (line 955,column 33)

若原專案中使用了scss並且使用了全域性變數,需要在vue.config.js中重新配置,並把全域性變數檔案放到src/assets/css目錄下。

在原專案中需要在build/utils.js中進行配置

scss: generateLoaders('sass').concat(
 {
 loader: 'sass-resources-loader',options: {
  resources: path.resolve(__dirname,'../src/assets/css/haigui-variable.scss')
 }
 }
)

新專案中就簡單的多,直接編輯vue.config.js,加入一節內容即可:

css: {
 loaderOptions: {
 sass: {
  // @/ 是 src/ 的別名 ~是必須有要加的
  data: '@import "~@/assets/css/haigui-variable";'
  // 如果沒有設定別名可以這麼寫
  // data: '@import "./src/assets/css/haigui-variable";'
 }
 }
}

4、runtime-only

You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions,or use the compiler-included build.

原因:

vue有兩種形式的程式碼 compiler(模板)模式和runtime模式(執行時),vue模組的package.json的main欄位預設為runtime模式, 指向了"dist/vue.runtime.common.js"位置。

這是vue升級到2.0之後就有的特點。

而在main.js檔案中,初始化vue卻是這麼寫的,這種形式為compiler模式的,所以就會出現上面的錯誤資訊。

new Vue({
 el: '#app',router,store,components: { App },template: '<App/>'
});

解決辦法:

方法一:

將main.js中的程式碼修改如下就可以

new Vue({
 router,render: h => h(App)
}).$mount('#app')

到這裡我們的問題還沒完,那為什麼之前是沒問題的,之前vue版本也是2.x的呀?

這也是第二種解決辦法:

因為之前我們的webpack配置檔案裡有個別名配置,具體如下

resolve: {
 alias: {
  'vue$': 'vue/dist/vue.esm.js' //內部為正則表示式 vue結尾的
 }
}

也就是說,import Vue from ‘vue' 這行程式碼被解析為 import Vue from ‘vue/dist/vue.esm.js',直接指定了檔案的位置,沒有使用main欄位預設的檔案位置。

所以第二種解決方法就是,在vue.config.js檔案里加上webpack的如下配置即可,

configureWebpack: {
 resolve: {
 alias: {
  'vue$': 'vue/dist/vue.esm.js' 
 }
 }
}

既然到了這裡就會想到第三中解決方法,那就是在引用vue時,直接寫成如下即可

import Vue from 'vue/dist/vue.esm.js'

以上這篇vue專案檢視vue版本及cli版本的實現方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。