kbone項目添加路徑訪問別名


給kbone項目添加路徑訪問別名,這樣在項目開發中就可以很方便的訪問一些目錄,入 assets/images 靜態圖片目錄等

kbone 項目默認也給我們預留是別名配置,如 : package.json 文件里面的  alias 屬性,和 webpack.config.dev.js 配置文件里面的 alias 。

webpack.config.dev.js 配置文件里面的 alias 默認是直接取 package.json 文件里面的 alias 。且,在webpack.mp.config.js 文件中沒有別名。那么,默認配置的別名會有以下3個問題

1、這個 alias 只能在 web 開發用,而小程序開發則不能使用別名。

2、package.json不能獲取到真實的文件夾目錄,在pagekage.json 中的 alias 只是一個簡單的字符串,當你在不同的目錄下面使用的時候,你會發現經常會找不到文件。

3、我們目前有好幾個打包的配置文件,webpack.config.dev.js 、webpack.config.prod.js 和 webpack.mp.config.js,如果單獨在配置我們需要配置三遍。

 

那么怎么辦呢?

 

最后想到,只能在 package.json 文件里面進行配置,但是之前說到,在 package.json 文件里面配置的話,不能獲取到真實的目錄,這個時候我們就需要對 webpack.config.dev.js 、webpack.config.prod.js 和 webpack.mp.config.js 配置文件的配置進行改造:

 

1、我們先在 package.json 文件中配置好所有的別名,並且,所有要訪問文件夾路徑的別名都已 @ 開頭:

package.json

{
    alias: {
        "注釋": "已 @ 開頭的別名,其值都是從目錄 src 內進行設置,在對應的  webpack.config.dev.js 和 webpack.mp.config.js 中會將這個路徑處理成項目可以用的路徑",
        "@images": "/assets/images",
        "@components": "/components"
        ...
    }
}    

  注意: package.json 中不能出現注釋,因此,我把注釋寫成了對象的一部分。

 

2、接下來我們要改造 webpack.config.dev.js 、webpack.config.prod.js 和 webpack.mp.config.js 配置文件

webpack.congif.dev.js 和 webpack.config.prod.js  改造前代碼:

const fileList = require('./entry');

const pjson = require('../package.json');

module.exports = {
    ....
    alias: pjson.alias
    ....
}

 

webpack.config.dev.js 和 webpack.config.prod.js  改造后代碼:

const fileList = require('./entry');

const pjson = require('../package.json');

// 從package.json 中獲取 arias,把@開頭的處理成當前項目能用的路徑
if (pjson && pjson.alias) {
  let alias = pjson.alias;
  let a = ''
  for (a in alias) {
    if (a.indexOf('@') === 0) {
        alias[a] = path.join(__dirname, '../src' + alias[a]);
    }
  }
}

module.exports = {
    ....
    alias: pjson.alias
    ....
}

  注意:紅色為新增代碼

 

3、接下來改造小程序打包配置文件 webpack.mp.config.js ,在改造前 webpack.mp.config.js 配置文件中並沒有別名的配置,那么我們就在 resolve屬性值中新增 alias 配置項,代碼如下:

webpack.mp.config.js 修改前:

const MpPlugin = require('mp-webpack-plugin')
const isOptimize = false // 是否壓縮業務代碼,開發者工具可能無法完美支持業務代碼使用到的 es 特性,建議自己做代碼壓縮
module.exports = {
    mode: 'production',
    ....
    resolve: {
        extensions: ['*', '.js', '.vue', '.json'],
     ... }
   ... }

 

webpack.mp.config.js 修改后:

const MpPlugin = require('mp-webpack-plugin')
const isOptimize = false // 是否壓縮業務代碼,開發者工具可能無法完美支持業務代碼使用到的 es 特性,建議自己做代碼壓縮

const pjson = require('../package.json')

// 從package.json 中獲取 arias,把@開頭的處理成當前項目能用的路徑
if (pjson && pjson.alias) {
  let alias = pjson.alias;
  let a = ''
  for (a in alias) {
    if (a.indexOf('@') === 0) {
        alias[a] = path.join(__dirname, '../src' + alias[a]);
    }
  }
}


module.exports = {
    mode: 'production',
    ....
    resolve: {
        extensions: ['*', '.js', '.vue', '.json'],
        alias: {
            ...pjson.alias,
            // '@images': path.join(__dirname, "../src/assets/images"),
            // '@components': path.join(__dirname, '../src/components'),
        }
     ... }
   ... }

  注意:紅色為新增代碼

 

4、業務代碼中引用 /src/assets/iamges/logo.jpg 文件

<image src="@images/logo.jpg" alt="logo" />

  

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM