国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

自己動手封裝axios通用方法并上傳至私有npm倉庫:詳細步驟與實現(xiàn)指南

這篇具有很好參考價值的文章主要介紹了自己動手封裝axios通用方法并上傳至私有npm倉庫:詳細步驟與實現(xiàn)指南。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、構建方法

  • 確定工具庫的需求和功能:在開始構建工具庫之前,你需要明確你的工具庫需要包含哪些方法及工具,以及這些工具或方法應該具備哪些功能。這有助于你更好地規(guī)劃你的開發(fā)工作。

  • 編寫工具代碼:使用你熟悉的前端框架(如React、Vue等)編寫工具代碼。確保你的代碼具有良好的可讀性和可維護性,并遵循相關的編碼規(guī)范。

  • 創(chuàng)建工具庫的結構:為了組織和管理你的組件,你需要創(chuàng)建一個清晰的目錄結構。這可以包括組件的源代碼、樣式文件、文檔和示例等。

1、api/request.js

這里是axios操作的封裝

import axios from 'axios'
import {
    replayDefence,
    encryptRequest,
    distortDefence,
    requestTimeOut
} from './requestHandler'
axios.defaults.timeout = requestTimeOut || 20000; //超時響應
axios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8'; // 配置請求頭
axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'; // 區(qū)分ajax請求還是普通請求
axios.defaults.withCredentials = true; // axios 默認不發(fā)送cookie,需要全局設置true發(fā)送cookie

class HttpRequest {
    constructor() {
        this.instance = axios.create()
        this.interceptors()
    }
    interceptors() {
        // request攔截器
        this.instance.interceptors.request.use((config) => {
            if (config.url) {
                // 防重放
                replayDefence(config);
                // 報文加密
                encryptRequest(config);
                // 防篡改
                distortDefence(config);
                return config;
            }
        }, error => {
            return Promise.reject(error);
        })

        // respone攔截器
        this.instance.interceptors.response.use(async (res) => {
            if (res.status === 200) {
                // return Promise.resolve(res)
                return res
            } else {
                return Promise.reject(res)
            }
        }, error => {
            return Promise.reject(error)
        })
    }


    /**
     * 提交數(shù)據(jù),同時支持  data 和 params
     * @param {*} url 
     * @param {*} params 
     * @returns 
     */
    post(url, params = {}) {
        return this.instance({
            url: url,
            method: 'post',
            data: params
        })
    }

    /**
     * 獲取數(shù)據(jù),只支持 params 傳參
     * @param {*} url 
     * @param {*} params 
     * @returns 
     */
    get(url, params = {}) {
        return this.instance({
            url: url,
            method: 'get',
            params: params
        })
    }

    /**
     * 更新數(shù)據(jù),同時支持  data 和 params
     * @param {*} url 
     * @param {*} params 
     * @returns 
     */
    put(url, params = {}) {
        return this.instance({
            url: url,
            method: 'put',
            data: params
        })
    }

    /**
     * 刪除數(shù)據(jù),只支持 params傳參
     * @param {*} url 
     * @param {*} params 
     * @returns 
     */
    delete(url, params = {}) {
        return this.instance({
            url: url,
            method: 'delete',
            params: params
        })
    }
}

export default HttpRequest
2、api/requestHandler.js

這里是請求攔截中的方法的抽離

const winConfig = window._CONFIG || {}
const {
    urlRandom,
    tampering,
    SM4Rncrypt,
    timeout
} = winConfig

export const requestTimeOut = timeout

/**
 * 防重放,這里添加時間戳和6位隨機數(shù)
 * @param {*} config 
 */
export const replayDefence = (config) => {
    if (urlRandom && config.url) {
        const nonce = Math.floor(Math.random() * 1000000)
        config.params = {
            _t: Date.parse(new Date()),
            nonce,
            ...config.params
        }
    }
}

/**
 * 報文加密,這里使用base64代替加密,你可以替換成SM4加密
 * @param {*} config 
 */
export const encryptRequest = (config) => {
    if (SM4Rncrypt && config.url && config.data) {
        if (['post', 'put', 'delete'].includes(config.method)) {
            config.headers["Content-Type"] = "application/json";
            let jsonStr = JSON.stringify(config.data);
            config.data = btoa(jsonStr);
        }
    }
}

/**
 * 防篡改,這里是btoa(url+params+btoa(data)),你可以再加鹽
 * @param {*} config 
 */
export const distortDefence = (config) => {
    if (tampering && config.url) {
        let validCode = `${config.url}`
        if (config.params) {
            for (let key in config.params) {
                validCode += `&${key}=${config.params[key]}`
            }
        }
        if (config.data && config.method != 'get') {
            validCode += SM4Rncrypt ? config.data : JSON.stringify(config.data);
        }
        console.log('validCode:', validCode)
        config.headers["sign"] = btoa(validCode)
    }
}
3、api/index.js

這里文件首頁

import HttpRequest from "./request";

const axios = new HttpRequest()

export default axios

二、測試方法

編寫文檔和示例:為你的工具方法編寫清晰的文檔和示例,這有助于其他開發(fā)者理解和使用你的工具庫。

1、api/axios.js

這個是使用時的文件。現(xiàn)在測試用

import axios from "./index";

const baseURL = "";

//手機號歸屬地查詢
export const getPhone = (params) => axios.post(baseURL + '/v2/phone', params)

//歷史上的今天
export const getHistory = (params) => axios.post(baseURL + '/v2/history', params)

// Bing每日壁紙
export const getBing = (params) => axios.post(baseURL + '/v2/bing', params)

// 用戶IP信息
export const getIp = (params) => axios.post(baseURL + '/v2/getip', params)

//隨機顏色
export const getColor = (params) => axios.get(baseURL + '/v2/color', params)
2、main.js

這個是使用時的文件?,F(xiàn)在測試用

import * as api from './api/axios'
Vue.prototype.$apis = api
3、app.vue

這個是使用時的文件?,F(xiàn)在測試用

console.log(this.$apis)
        this.$apis.getPhone({ tel: 13225750729 }).then(res => {
            console.log(res.data)
        })
        this.$apis.getHistory({}).then(res => {
            console.log(res.data)
        })
        this.$apis.getIp({}).then(res => {
            console.log(res.data)
        })
        this.$apis.getColor({}).then(res => {
            console.log(res.data)
        })
4、vue.config.js

配置代理

module.exports = {
  productionSourceMap: false,
  devServer: {
    proxy: 'https://tenapi.cn/'
  }
}
5、index.html

首頁添加全局變量配置信息

window._CONFIG = {
    urlRandom: true, //防重放
    tampering: true, //防篡改
    SM4Rncrypt: false, //報文加密
    timeout: 10000 //超時時間
}

三、打包

1、配置package.json

添加打包到庫命令

{
  "scripts": {
    "plugin": "vue-cli-service build --target lib --name zouAxion --dest zouAxion src/api/index.js"
  },
}
2、生成庫包

打包工具庫:運行打包命令,將你的工具庫打包成一個npm包。這通常會在你的項目根目錄下生成一個目錄,其中包含打包后的文件。

npm run plugin

這是生成的zouAxion文件夾。

自己動手封裝axios通用方法并上傳至私有npm倉庫:詳細步驟與實現(xiàn)指南,vue,npm,其他,axios,私有npm倉庫,封裝axios通用方法,防重放,報文加密,防篡改,攔截器

3、配置發(fā)布信息

配置package.json:在項目的根目錄下創(chuàng)建一個package.json文件,并配置相關的元信息,例如包的名稱、版本、描述、入口文件等。確保你的包名在npm上是唯一的,尤其是如果你打算將它發(fā)布到公共npm倉庫。

注意:如果你的npm倉庫是私有的,你可能需要在package.json中添加一個publishConfig字段來指定你的私有倉庫地址。

在zouAxion文件夾里面創(chuàng)建package.json文件,配置發(fā)布信息。

{
    "name": "zou-axion",
    "version": "0.1.2",
    "private": false,
    "license": "MIT",
    "description": "今天我發(fā)布一個zouAxion插件",
    "main": "zouAxion.umd.min.js",
    "scripts": {
      
    },
    "dependencies": {

    },
    "devDependencies": {

    }
  }

自己動手封裝axios通用方法并上傳至私有npm倉庫:詳細步驟與實現(xiàn)指南,vue,npm,其他,axios,私有npm倉庫,封裝axios通用方法,防重放,報文加密,防篡改,攔截器

4、發(fā)布
  • 配置npm倉庫:如果你還沒有一個私有的npm倉庫,你需要先搭建一個。你可以使用Verdaccio等工具來快速搭建一個私有的npm倉庫。

  • 配置npm源:在你的本地開發(fā)環(huán)境中,將npm的源配置為你的私有倉庫地址。這可以確保當你發(fā)布組件庫時,它會被上傳到你的私有倉庫而不是公共的npm倉庫。

  • 登錄到npm倉庫:在終端中運行npm login命令,并按照提示輸入你的npm倉庫的用戶名、密碼和郵箱地址。這將使你能夠發(fā)布包到你的私有倉庫。

  • 發(fā)布工具庫:在終端中運行npm publish命令來發(fā)布你的工具庫。這會將你的工具庫上傳到你的私有npm倉庫中。

配置npm源

npm set registry http://localhost:4873/

在zouAxion文件夾里面執(zhí)行發(fā)布命令

npm publish

自己動手封裝axios通用方法并上傳至私有npm倉庫:詳細步驟與實現(xiàn)指南,vue,npm,其他,axios,私有npm倉庫,封裝axios通用方法,防重放,報文加密,防篡改,攔截器

四、使用

一旦你的工具庫被發(fā)布到私有npm倉庫,你就可以在其他項目中使用它了。只需在項目中使用npm install命令來安裝你的工具庫,然后按照文檔中的說明來使用它即可。

跟使用axios的方法一樣。

1、安裝
npm install axios
npm install zou-axios

自己動手封裝axios通用方法并上傳至私有npm倉庫:詳細步驟與實現(xiàn)指南,vue,npm,其他,axios,私有npm倉庫,封裝axios通用方法,防重放,報文加密,防篡改,攔截器

2、使用

api/axios.js

import axios from "zou-axios";
const baseURL = "";
//歷史上的今天
export const getHistory = (params) => axios.post(baseURL + '/v2/history', params)

main.js

import * as api from './api/axios'
Vue.prototype.$apis = api

app.vue

this.$apis.getHistory({}).then(res => {
    console.log(res.data)
})

五、維護

1、維護和更新

隨著項目的進行,你可能需要對你的工具庫進行維護和更新。這包括修復bug、添加新功能、更新文檔等。在每次更新后,記得重新打包并發(fā)布你的工具庫,以便其他項目能夠使用到最新的版本。

2、注意事項
  • 版本控制:確保你的工具庫使用版本控制(如Git),以便你可以追蹤和管理不同版本的代碼。

  • 測試:在發(fā)布工具庫之前,確保進行充分的測試,以確保其穩(wěn)定性和可用性。

  • 文檔和示例:持續(xù)更新和維護你的文檔和示例,以幫助其他開發(fā)者更好地理解和使用你的工具庫。

  • 記得在開發(fā)過程中保持代碼質量和可維護性,并定期更新和維護你的組件庫。文章來源地址http://www.zghlxwxcb.cn/news/detail-851397.html

到了這里,關于自己動手封裝axios通用方法并上傳至私有npm倉庫:詳細步驟與實現(xiàn)指南的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 前端架構師-week4-封裝通用的npm包管理類Package

    目錄 腳手架命令本地調試功能支持 動態(tài)執(zhí)行庫exec模塊創(chuàng)建 創(chuàng)建 npm 模塊通用類 Package Package 類的屬性、方法定義及構造函數(shù)邏輯開發(fā) Package 類獲取入口文件路徑功能開發(fā)(pkg-dir應用+解決不同操作系統(tǒng)路徑兼容問題)? 利用 npminstall 庫安裝 npm 模塊 Package 類判斷模塊是否存在

    2024年02月03日
    瀏覽(24)
  • 上傳自己的npm依賴包

    上傳自己的npm依賴包

    有時候我們需要對某個依賴包的源碼進行修改進行使用,但我們又不能對已有的源碼官網進行上傳更新,這時,我們可以獲取依賴包進行修改后,自行部署到https://npmjs.com中 1.官網https://npmjs.com中注冊一個賬號(賬號,密碼,郵箱,記住了,到時候要用) 2.對自己要上傳的依賴

    2024年02月11日
    瀏覽(18)
  • 如何封裝Vue組件并上傳到npm

    如何封裝Vue組件并上傳到npm

    1.注冊npm賬號:npm | Home (npmjs.com) 2.保證當前環(huán)境安裝了vue、webpack、node,以下工作將在該環(huán)境下進行(沒有的小伙伴自行百度安裝哈~) 3.一下用到的環(huán)境版本 webpack:v5.1.4 node:v12.10.0 vue:v2.6.14 4.創(chuàng)建一個基于webpack的vue項目,這個項目將會是我們的組件項目了。 在我們日常開

    2024年04月25日
    瀏覽(24)
  • 如何自己創(chuàng)建一個工具項目并上傳到npm上使用

    如何自己創(chuàng)建一個工具項目并上傳到npm上使用

    選擇框架:? ?選擇語言: 在項目中使用命令安裝項目依賴: ? 運行項目: ?運行成功界面: 注意: version:當前發(fā)布的版本號,項目每次改動后需要修改版本后再發(fā)布,? 默認要0.0.1開始才能上傳,相同版本是傳不上去的,一定要記得每次更改了代碼都改下版本號。 name: 包

    2024年02月12日
    瀏覽(28)
  • axios詳解以及完整封裝方法

    \\\"\\\"\\\" Axios 是一個基于 promise 網絡請求庫,作用于node.js 和瀏覽器中。 它是 isomorphic 的(即同一套代碼可以運行在瀏覽器和node.js中)。在服務端它使用原生 node.js http 模塊, 而在客戶端 (瀏覽端) 則使用 XMLHttpRequests。 axios有以下特性: 從瀏覽器創(chuàng)建 XMLHttpRequests 從 node.js 創(chuàng)建 http 請求

    2024年02月16日
    瀏覽(21)
  • 立創(chuàng)eda學習筆記五:如何自己畫器件的符號和封裝并上傳

    立創(chuàng)eda畫符號和封裝很方便的,一般是先畫符號,再畫封裝,再關聯(lián)起來。 這里的符號是電氣符號,即原理圖里面用到的表示一個電氣器件的電氣符號。 這里的封裝不是指的引腳封裝圖,而是放到pcb板上進行焊接時用的焊盤封裝圖。 其實主要的資料在立創(chuàng)eda推出的使用教程

    2023年04月14日
    瀏覽(326)
  • 【Python】面向對象 - 封裝 ② ( 訪問私有成員 | 對象無法訪問私有變量 / 方法 | 類內部訪問私有成員 )

    【Python】面向對象 - 封裝 ② ( 訪問私有成員 | 對象無法訪問私有變量 / 方法 | 類內部訪問私有成員 )

    在下面的 Python 類 Student 中 , 定義了私有的成員變量 , 該私有成員變量 , 只能在類內部進行訪問 , 類的外部無法進行訪問 ; 在 類外部 創(chuàng)建的 Student 實例對象 , 是無法訪問 __address 私有成員的 ; 使用 實例對象 訪問 類的私有成員 , 編譯時不會報錯 , 但是運行時會報錯 最后一行代

    2024年02月13日
    瀏覽(24)
  • Vue3 + Vite + Ts自己封裝的基礎組件庫發(fā)布npm ,npm安裝使用(Volar )支持TS 類型提示功能(vite-plugin-dts 使用)

    Vue3 + Vite + Ts自己封裝的基礎組件庫發(fā)布npm ,npm安裝使用(Volar )支持TS 類型提示功能(vite-plugin-dts 使用)

    在開發(fā)Vue3 + Ts項目時:使用自己二次封裝的基礎組件,沒有 Ts類型提示 ,不能像 Element-plus 鼠標停在標簽或者屬性上就能提示當前組件有哪些屬性(即props)及其屬性的類型,如下圖是 Element-plus 組件的 使用Vs Code Volar的提示: 此插件的作用:為打包的庫里加入聲明文件(即生

    2024年02月09日
    瀏覽(26)
  • Java多線程查表(封裝方法 多表通用)

    Java多線程查表(封裝方法 多表通用)

    經過多線程的學習和實踐 總結了兩種多線程查表方法? 兩種方法都經過我的封裝 某表使用時 server層加上方法sql即可 查詢流程: 1 count全表條數(shù) 2 通過總條數(shù) 將全表數(shù)據(jù)分為10份 3 開辟10個線程查詢limit語句(線程數(shù)可自定義) 以下方法均以mysql數(shù)據(jù)庫測試 其他庫同理 目錄 一?線

    2024年02月12日
    瀏覽(16)
  • 用PHP封裝一個強大且通用的cURL方法

    用PHP封裝一個強大且通用的cURL方法。 用PHP封裝一個強大且通用的cURL方法。 用PHP封裝一個強大且通用的cURL方法。 用PHP封裝一個強大且通用的cURL方法。

    2024年02月14日
    瀏覽(37)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包