前端自定義函數(shù)工具庫(kù)

前言:日常的項(xiàng)目開(kāi)發(fā)中蘸劈,通常會(huì)用到各種工具函數(shù),比如時(shí)間戳轉(zhuǎn)換尊沸,去重威沫,節(jié)流,防抖等洼专,這些方法我們通常會(huì)放在項(xiàng)目的utils中棒掠。但是如果我們切換到另外的項(xiàng)目,又會(huì)創(chuàng)建一個(gè)utils來(lái)滿(mǎn)足目前項(xiàng)目所需要的公共的函數(shù)屁商。如此重復(fù)烟很,代碼復(fù)用性不僅低,管理起來(lái)也不方便蜡镶,因此我們創(chuàng)建一個(gè)自定義函數(shù)工具庫(kù)發(fā)布到NPM上雾袱,如果不僅方便管理,不同的項(xiàng)目只要安裝就能夠直接使用帽哑。
走起~~~

創(chuàng)建工具包項(xiàng)目

  1. 安裝Node

    • 檢查是否已經(jīng)安裝node(node中自帶npm)
    • node -v
    • npm -v
      image.png
  2. 創(chuàng)建項(xiàng)目

    • 創(chuàng)建一個(gè)空的項(xiàng)目文件:tools-fn-library
    • 在文件夾下執(zhí)行命令
    • npm init -y
    • 會(huì)在文件下面自動(dòng)創(chuàng)建一個(gè)package.json文件
  3. 下載依賴(lài)包

    • npm i webpack webpack-cli
    • 會(huì)在文件下面自動(dòng)創(chuàng)建一個(gè)node_modules文件夾


      image.png
  4. 配置webpack

    • webpack.config.js 必須是在根目錄下谜酒,并且文件名不能改變
    // 引入 nodeJS 內(nèi)置模塊 path
    const path = require('path');
    module.exports = {
        // 模式
        mode: 'development', // 也可以使用 production
        // 入口
        entry: './src/index.js',
        // 出口
        output: {
            // 打包文件夾
            path: path.resolve(__dirname, 'dist'),
            // 打包文件   打包后該文件在dist文件夾下面
            filename: 'tools-utils.js',
            // 向外暴露的對(duì)象名稱(chēng)
            library: 'mUtiles',
            // 打包生成庫(kù)可以通過(guò)esm/commonjs/reqirejs的語(yǔ)法引入
            libraryTarget: 'umd'
        }
    }
  1. 在入口JS中暴露功能
    • src/index.js
    export function test() {
        document.write('測(cè)試自定義包')
        console.log('text()');
    }
    
  2. 配置打包命令
    • package.json
    "script": {
        "build:watch": "webpack --watch"
    }
    
  3. 對(duì)項(xiàng)目進(jìn)行打包
  • 會(huì)自動(dòng)生成一個(gè)dist文件下,下面的 tools-utils.js 就是我們需要引用的js
    npm run build:watch
    

到此示例已經(jīng)打包完成妻枕,如果使用呢

  1. 創(chuàng)建一個(gè)html文件
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="../dist/tools-utils.js"></script>
</head>

<body>
    <script>
        console.log('mUtils', mUtils);
        mUtils.test()
    </script>
</body>

</html>
image.png
  • 說(shuō)明成功僻族,接下來(lái)就是把我們之前寫(xiě)的公共的方法引入到index.js中粘驰,并打包使用
  1. 引入公共文件
    src/chunk.js
/**
 * @description: 數(shù)組分組
 * @param {Array} arr [1,2,3,4,5]
 * @return {Number} size 2
 * @result {Arrsy} [[1,2],[3,4],5]
 */
export function chunk(arr, size = 1) {
    if (arr.length === 0) {
        return [];
    }
    // 聲明兩個(gè)變量
    let result = [];
    let tmp = [];
    arr.forEach(item => {
        // 判斷 tmp 元素長(zhǎng)度是否為 0 
        if (tmp.length === 0) {
            // 將 tmp 壓入到 result 中
            result.push(tmp);
        }
        tmp.push(item)
        if (tmp.length === size) {
            tmp = [];
        }
    })
    return result;
}

index.js

export function test() {
    document.write('測(cè)試自定義包')
    console.log('text()');
}


// 方法一:引入其他文件,任何再暴露
// 1. 目標(biāo)文件中暴露數(shù)據(jù) export 數(shù)據(jù)
import { chunk } from './chunk';
// 2. 暴露數(shù)據(jù)
export { chunk }

// 方法二
export { apply } from './apply'
image.png

發(fā)布到npm中央倉(cāng)庫(kù)

  1. 完善 package.json
    • 注意:
      • name:必須是唯一的名稱(chēng)(在npm在線(xiàn)中央倉(cāng)庫(kù)中沒(méi)有同名的)
      • main:必須指定為打包生成的js文件
      • keywords:指定一些方便別的程序員搜索到當(dāng)前庫(kù)的關(guān)鍵字
{
  "name": "mine-tools-utils",
  "version": "1.0.0",
  "description": "<!--\r  * @Author: lu\r  * @Date: 2021-02-23 10:41:08\r  * @LastEditTime: 2021-06-18 17:20:44\r  * @FilePath: \\tools-fn-library\\README.md\r  * @Description: \r -->\r # tools-fn-library\r # 自定義工具函數(shù)庫(kù)",
  "main": "./dist/tools-ultils.js",
  "directories": {
    "test": "test"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build:watch": "webpack --watch"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/lupei07/tools-fn-library.git"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/lupei07/tools-fn-library/issues"
  },
  "homepage": "https://github.com/lupei07/tools-fn-library#readme",
  "dependencies": {
    "webpack": "^5.39.1",
    "webpack-cli": "^4.7.2"
  }
}
  1. npm 配置

    • npm配置的中央倉(cāng)庫(kù)不能是淘寶鏡像
    • 發(fā)布前必須先執(zhí)行:npm config set registry https://registry.npmjs.org/
    • 不用發(fā)布時(shí):npm config set registry http://registry.npm.taobao.org/
    • 查看配置:npm config list
  2. 注冊(cè)npm中央倉(cāng)庫(kù)賬號(hào)

    • 注冊(cè)地址:https://www.npmjs.com/
    • 關(guān)鍵信息:用戶(hù)名/密碼/郵箱(需要驗(yàn)證)
  3. 添加用戶(hù)

    • 執(zhí)行:npm addUser 或者 npm login
    • 登錄npm倉(cāng)庫(kù)
    • 一次指定用戶(hù)名/密碼/郵箱
  4. 發(fā)布倉(cāng)庫(kù)

    • 發(fā)布:npm publish
  5. 升級(jí)更新

    • 修改項(xiàng)目庫(kù)的版本號(hào):package.json 中的version 從1.0.0改為1.0.1述么,注意一定要變大
    • 修改代碼后重新打包:npm run build
    • 執(zhí)行發(fā)布:npm publish
  6. 強(qiáng)制刪除已發(fā)布的庫(kù)

    • 執(zhí)行: npm unpublish --force
    • 注意:必須在72小時(shí)內(nèi)蝌数,否則不能再刪除
  7. 引入使用

    • 安裝 npm i mine-tools-utils
    • 引用:<script src="./node_modules/mine-tools-utils/dist/tools-utils.js"></script>
    • 升級(jí)包: upgrade mine-tools-utils
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市度秘,隨后出現(xiàn)的幾起案子顶伞,更是在濱河造成了極大的恐慌,老刑警劉巖剑梳,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唆貌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡垢乙,警方通過(guò)查閱死者的電腦和手機(jī)锨咙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)追逮,“玉大人酪刀,你說(shuō)我怎么就攤上這事∨シ酰” “怎么了骂倘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)巴席。 經(jīng)常有香客問(wèn)我历涝,道長(zhǎng),這世上最難降的妖魔是什么情妖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任睬关,我火速辦了婚禮诱担,結(jié)果婚禮上毡证,老公的妹妹穿的比我還像新娘。我一直安慰自己蔫仙,他們只是感情好料睛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著摇邦,像睡著了一般恤煞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上施籍,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天居扒,我揣著相機(jī)與錄音,去河邊找鬼丑慎。 笑死喜喂,一個(gè)胖子當(dāng)著我的面吹牛瓤摧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播玉吁,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼照弥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了进副?” 一聲冷哼從身側(cè)響起这揣,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎影斑,沒(méi)想到半個(gè)月后给赞,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡矫户,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年塞俱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吏垮。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡障涯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出膳汪,到底是詐尸還是另有隱情唯蝶,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布遗嗽,位于F島的核電站粘我,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏痹换。R本人自食惡果不足惜征字,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望娇豫。 院中可真熱鬧匙姜,春花似錦、人聲如沸冯痢。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)浦楣。三九已至袖肥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間振劳,已是汗流浹背椎组。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留历恐,地道東北人寸癌。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓选调,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親灵份。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仁堪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容