vue3+element-plus+router+vuex+axios從零開始搭建(2)

.env+vue.config.js

這一章主要環境相關配置

開發環境與線上環境配置

下面是vue cli 配置模式和環境變量: 模式和環境變量

vue-cli 3.0x與vue-cli 2.0x最主要的區別是項目結構目錄精簡化,這也帶來了許多問題,很多配置需要自己配置,

由於2.0x版本中直接在config/文件夾下面配置開發環境與線上環境,3.0x則需要自己配置。

首先配置開發環境,在項目根目錄下新建三個文件,如果有測試環境還可以再加一個。

屬性名必須以VUE_APP_開頭,比如VUE_APP_XXX 只有以 VUE_APP_ 開頭的變量會被 webpack.DefinePlugin 靜態嵌入到客戶端側的包中, NODE_ENVBASE_URL 是兩個特殊變量,在代碼中始終可用

vue3.0 .env 文件配置全局環境變量

在根目錄下創建以下文件

.env	全局默認,任何環境都加載合併	
.env.development	開發環境下的配置文件	
.env.production	    生產環境下的配置文件	

.env.development 內容寫

NODE_ENV="development"              //開發環境
BASE_URL="http://localhost:3000/"   //開發環境接口地址

.env.production 線上環境

NODE_ENV="production"  //生產環境
BASE_URL="url"         //生產環境的地址

現在我們如何在項目中判斷當前環境呢? 我們可以根據process.env.BASE_URL來獲取它是線上環境還是開發環境,下一章中會有運用

  if(process.env.NODE_ENV='development'){
    console.log( process.env.BASE_URL) // http://localhost:3000/
  }else{
    console.log( process.env.BASE_URL) // url
  }

只在本地有效的變量

有的時候你可能有一些不應該提交到代碼倉庫中的變量,尤其是當你的項目託管在公共倉庫時。 這種情況下你應該使用一個 .env.local 文件取而代之。本地環境文件默認會被忽略,且出現在 .gitignore 中。

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

vue.config.js配置

2.x裏面webpack相關的配置項直接在項目的build/webpack.base.conf.js裏面配置,而3.x完全在vue.config.js中配置

創建vue.config.js

vue.config.js 是一個可選的配置文件,如果項目的 (和 package.json 同級的) 根目錄中存在這個文件,那麼它會被 @vue/cli-service 自動加載。

由於項目初始化的時候沒有vue.config.js配置文件,因此我們需要在項目根目錄下新建一個vue.config.js配置項。

配置具體參數可以參考: 配置參考

這個項目主要是配置三個東西,第一個就是目錄別名alias,另一個是項目啓動時自動打開瀏覽器,最後一個就是處理css。

webpack 相關

const path = require("path");
const resolve = dir => path.join(__dirname, dir);
module.exports = {
    chainWebpack: config => {
        //設置別名
        config.resolve.alias
            .set('@',resolve('src'))
    },
    devServer: {
        open:true  //打開瀏覽器窗口
    },
    css: {
        loaderOptions: {
            css: {
                // 這裏的選項會傳遞給 css-loader
            },
        }
    }
}

更多配置項參考

vue-cli4的配置vue.config.js

更多配置項

'use strict'
module.exports = {
    publicPath: './',  //基本路徑
    outputDir: 'dist', //構建時的輸出目錄
    assetsDir: 'static',//放置靜態資源的目錄
    indexPath: 'index.html',//html 的輸出路徑
    filenameHashing: true,//文件名哈希值
    lintOnSave: true,//是否在保存的時候使用 `eslint-loader` 進行檢查。
 
    //組件是如何被渲染到頁面中的? (ast:抽象語法樹;vDom:虛擬DOM)
    //template ---> ast ---> render ---> vDom ---> 真實的Dom ---> 頁面
    //runtime-only:將template在打包的時候,就已經編譯爲render函數
    //runtime-compiler:在運行的時候纔去編譯template
    runtimeCompiler: false,
    
    transpileDependencies: [],//babel-loader 默認會跳過 node_modules 依賴。
    productionSourceMap: false,//是否爲生產環境構建生成 source map?
 
    //調整內部的 webpack 配置
    configureWebpack:: () => {},
 
    chainWebpack: () => {},
 
    // 配置 webpack-dev-server 行爲。
    devServer: {
        open: true, //編譯後默認打開瀏覽器
        host: '0.0.0.0',  //域名
        port: 8080,  // 端口
        https: false,  //是否https
        //顯示警告和錯誤
        overlay: {
            warnings: false,
            errors: true
        },
        proxy: {
            '/api': {
                target: 'http://asoyy.xyz',
                changeOrigin: true, //是否跨域
                ws: false, //是否支持websocket
                secure: false, //如果是https接口,需要配置這個參數
                pathRewrite: {
                    '^/api': ''
                }
            }
        }
    }
}

添加別名alias

const path = require("path");
const resolve = dir => path.join(__dirname, dir);
 
module.exports = {
  chainWebpack: config => {
    config.resolve.alias
      .set("vue$", "vue/dist/vue.esm.js")
      .set("@", resolve("src"))
      .set("@assets", resolve("src/assets"))
      .set("@components", resolve("src/components"))
      .set("@views", resolve("src/views"))
      .set("@router", resolve("src/router"))
      .set("@store", resolve("src/store"));
  }
};

其他

關於sass(scss)、less、postcss、stylus等的用法與區別

CSS預處理器用一種專門的編程語言,進行Web頁面樣式設計,然後再編譯成正常的CSS文件,以供項目使用。

參考

從0到1搭建Element的後臺框架

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章