摘要:獲取參數(shù)總結(jié)這里我主要總結(jié)了我開發(fā)工具庫所用到的一些實踐,參考了不少開源的項目,寫的比較匆忙,有些細(xì)節(jié)可以參考源代碼,如果有不合理的地方盡情吐槽,共同進(jìn)步。
基于rollup打造前端工具庫的實踐
老生常談工具庫,每個公司都應(yīng)該需要一個工具庫去處理一些公共重復(fù)的代碼,比如公共函數(shù),ajax,微信sdk,本地存儲等等,目前構(gòu)建工具大行其道,我覺得是時候擺脫復(fù)制粘貼的代碼了,這里我對基于rollup構(gòu)建工具庫進(jìn)行了一個總結(jié)(相比webpack更加配置簡單,代碼也清晰很多吧),更多是項目的組織,畢竟具體的代碼每個公司都有自己的業(yè)務(wù)需求,希望能夠幫助到大家。
目錄結(jié)構(gòu)├── .git ├── .gitignore ├── .npmignore ├── LICENSE 協(xié)議 ├── coverage 代碼覆蓋率文件 ├── docs 文檔 ├── index.html 測試html ├── lib 引用的入口文件 ├── node_modules ├── package-lock.json ├── package.json ├── readme.md 說明文檔 ├── rollup.config.js rollup配置文件 ├── scripts 構(gòu)建腳本 ├── src 開發(fā)目錄 ├── test 測試用例 └── yarn.lock
這是最終的項目目錄結(jié)構(gòu) 地址
配置import pkg from "./package.json"; import buble from "rollup-plugin-buble"; import resolve from "rollup-plugin-node-resolve"; import uglify from "rollup-plugin-uglify" import { minify } from "uglify-es"; export default [ { input: "src/main.js", output: { name: "_", file: pkg.browser, format: "umd" }, plugins:[ resolve(), buble({ // transpile ES2015+ to ES5 objectAssign: "Object.assign", exclude: ["node_modules/**"] }), uglify({},minify) ], }, { input: "src/main.js", output: { file: pkg.main, format: "es" }, plugins: [ resolve(), buble({ objectAssign: "Object.assign", exclude: ["node_modules/**"] }), uglify({},minify) ] } ]
rollup.config.js是rollup的主要配置文件,這里我主要將代碼打包成瀏覽器直接使用的umd格式和打包工具使用的esm格式。
最終會生成
lib z.esm.js webpack等工具import,支持tree shaking按需加載 z.min.js script標(biāo)簽引入開發(fā)
我這邊將開發(fā)的具體代碼放在src中,入口為main.js,每個功能模塊是一個目錄,有個入口文件index.js方便進(jìn)行單元測試,然后只有針對一個方法建立一個文件就可以了,已url處理功能為例:
src main.js reg/ dom/ url/ index.js getParamByName.js parseQueryString.js
url/index.js
//暴露處所有的方法 export * from "./getParamByName" export * from "./parseQueryString"
url/getParamByName.js
/** * 獲取url參數(shù) * ### Example (es imports) * ```js * // url www.baidu.com?c=aa * import {getParamByName} from "zrutil" * getParamByName("c") => "aa" * ``` */ export function getParamByName(name, url) { if (!url) url = window.location.href; name = name.replace(/[[]]/g, "$&"); var regex = new RegExp("[?&]" + name + "(=([^]*)|&|#|$)"), results = regex.exec(url); if (!results) return null; if (!results[2]) return ""; return decodeURIComponent(results[2].replace(/+/g, " ")); }測試
好的工具庫缺少不了測試,這里我采用的是jest, 個人認(rèn)為jest的集成度更高,語法也簡單,內(nèi)置的代碼覆蓋率檢查很快就可以上手。我們只需要對每個功能模塊進(jìn)行測試代碼的編寫就可以了。
test/url.test.js
import {parseQueryString, getParamByName} from "../src/url" describe("url test", ()=>{ const url = "http://www.baidu.com?a=1&b=aaa" describe("獲取url參數(shù):getParamByName",()=>{ test(`${url} getParamByName("a",url) 返回 1`, ()=>{ expect(getParamByName("a",url)).toBe("1") }) test(`${url} getParamByName("b",url) 返回 "aaa"`, ()=>{ expect(getParamByName("b",url)).toBe("aaa") }) test(`${window.location.href} getParamByName("c") 返回 "ccc"`, ()=>{ expect(getParamByName("c")).toBe("ccc") }) test(`${window.location.href} getParamByName("b") 返回 null`, ()=>{ expect(getParamByName("b")).toBe(null) }) }) describe("解析url:parseQueryString",()=>{ test(`${url} 返回 {a:"1",b:"aaa"}`, ()=>{ expect(parseQueryString(url)).toEqual({a:"1",b:"aaa"}) }) test(`${window.location.href} 返回 {c:"ccc"}`, ()=>{ expect(parseQueryString()).toEqual({c:"ccc"}) }) }) })
測試結(jié)果:
測試覆蓋率:
文檔為了使文檔能夠自動化生成,主要采用了jsdoc-to-markdown,只需要在每個方法上寫上注釋的代碼,就能自動化的生成對應(yīng)的md文檔,非常方便。
/** * 獲取url參數(shù) * ### Example (es imports) * ```js * // url www.baidu.com?c=aa * import {getParamByName} from "zrutil" * getParamByName("c") => "aa" * ``` */ export function getParamByName(name, url) { }總結(jié)
這里我主要總結(jié)了我開發(fā)工具庫所用到的一些實踐,參考了不少開源的項目,寫的比較匆忙,有些細(xì)節(jié)可以參考源代碼,如果有不合理的地方盡情吐槽,共同進(jìn)步。
項目地址:地址
開發(fā)環(huán)境: MacOS
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92802.html
摘要:也能幫你寫代碼了微軟和團(tuán)隊一起推出擴(kuò)展,預(yù)覽版可以在插件市場直接查找安裝。微軟宣布將采用內(nèi)核這對于諸多的前端開發(fā)者而言,無疑是本年底最大的福音具體的計劃可以參考官網(wǎng)的博客,在不久的將來,基于的瀏覽器將要正式和我們見面啦。 訂閱 / 投稿:https://github.com/txd-team/monthly本期小編:?Hkmu (扶容)?/?x-cold (尹摯) 新聞快報 npm ...
摘要:也能幫你寫代碼了微軟和團(tuán)隊一起推出擴(kuò)展,預(yù)覽版可以在插件市場直接查找安裝。微軟宣布將采用內(nèi)核這對于諸多的前端開發(fā)者而言,無疑是本年底最大的福音具體的計劃可以參考官網(wǎng)的博客,在不久的將來,基于的瀏覽器將要正式和我們見面啦。 訂閱 / 投稿:https://github.com/txd-team/monthly本期小編:?Hkmu (扶容)?/?x-cold (尹摯) 新聞快報 npm ...
摘要:也能幫你寫代碼了微軟和團(tuán)隊一起推出擴(kuò)展,預(yù)覽版可以在插件市場直接查找安裝。微軟宣布將采用內(nèi)核這對于諸多的前端開發(fā)者而言,無疑是本年底最大的福音具體的計劃可以參考官網(wǎng)的博客,在不久的將來,基于的瀏覽器將要正式和我們見面啦。 訂閱 / 投稿:https://github.com/txd-team/monthly本期小編:?Hkmu (扶容)?/?x-cold (尹摯) 新聞快報 npm ...
摘要:前端每周清單半年盤點(diǎn)之與篇前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開發(fā)教程工程實踐深度閱讀開源項目巔峰人生等欄目。與求同存異近日,宣布將的構(gòu)建工具由遷移到,引發(fā)了很多開發(fā)者的討論。 前端每周清單半年盤點(diǎn)之 React 與 ReactNative 篇 前端每周清單專注前端領(lǐng)域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點(diǎn);分為...
閱讀 3278·2021-10-11 10:59
閱讀 2843·2021-10-11 10:58
閱讀 2253·2021-09-04 16:45
閱讀 2731·2019-08-30 15:44
閱讀 684·2019-08-30 15:44
閱讀 3209·2019-08-30 10:51
閱讀 1603·2019-08-29 18:46
閱讀 2762·2019-08-29 13:57