摘要:獲取參數總結這里我主要總結了我開發(fā)工具庫所用到的一些實踐,參考了不少開源的項目,寫的比較匆忙,有些細節(jié)可以參考源代碼,如果有不合理的地方盡情吐槽,共同進步。
基于rollup打造前端工具庫的實踐
老生常談工具庫,每個公司都應該需要一個工具庫去處理一些公共重復的代碼,比如公共函數,ajax,微信sdk,本地存儲等等,目前構建工具大行其道,我覺得是時候擺脫復制粘貼的代碼了,這里我對基于rollup構建工具庫進行了一個總結(相比webpack更加配置簡單,代碼也清晰很多吧),更多是項目的組織,畢竟具體的代碼每個公司都有自己的業(yè)務需求,希望能夠幫助到大家。
目錄結構├── .git ├── .gitignore ├── .npmignore ├── LICENSE 協議 ├── coverage 代碼覆蓋率文件 ├── docs 文檔 ├── index.html 測試html ├── lib 引用的入口文件 ├── node_modules ├── package-lock.json ├── package.json ├── readme.md 說明文檔 ├── rollup.config.js rollup配置文件 ├── scripts 構建腳本 ├── src 開發(fā)目錄 ├── test 測試用例 └── yarn.lock
這是最終的項目目錄結構 地址
配置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標簽引入開發(fā)
我這邊將開發(fā)的具體代碼放在src中,入口為main.js,每個功能模塊是一個目錄,有個入口文件index.js方便進行單元測試,然后只有針對一個方法建立一個文件就可以了,已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參數 * ### 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, 個人認為jest的集成度更高,語法也簡單,內置的代碼覆蓋率檢查很快就可以上手。我們只需要對每個功能模塊進行測試代碼的編寫就可以了。
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參數: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"}) }) }) })
測試結果:
測試覆蓋率:
文檔為了使文檔能夠自動化生成,主要采用了jsdoc-to-markdown,只需要在每個方法上寫上注釋的代碼,就能自動化的生成對應的md文檔,非常方便。
/** * 獲取url參數 * ### Example (es imports) * ```js * // url www.baidu.com?c=aa * import {getParamByName} from "zrutil" * getParamByName("c") => "aa" * ``` */ export function getParamByName(name, url) { }總結
這里我主要總結了我開發(fā)工具庫所用到的一些實踐,參考了不少開源的項目,寫的比較匆忙,有些細節(jié)可以參考源代碼,如果有不合理的地方盡情吐槽,共同進步。
項目地址:地址
開發(fā)環(huán)境: MacOS
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92802.html
摘要:也能幫你寫代碼了微軟和團隊一起推出擴展,預覽版可以在插件市場直接查找安裝。微軟宣布將采用內核這對于諸多的前端開發(fā)者而言,無疑是本年底最大的福音具體的計劃可以參考官網的博客,在不久的將來,基于的瀏覽器將要正式和我們見面啦。 訂閱 / 投稿:https://github.com/txd-team/monthly本期小編:?Hkmu (扶容)?/?x-cold (尹摯) 新聞快報 npm ...
摘要:也能幫你寫代碼了微軟和團隊一起推出擴展,預覽版可以在插件市場直接查找安裝。微軟宣布將采用內核這對于諸多的前端開發(fā)者而言,無疑是本年底最大的福音具體的計劃可以參考官網的博客,在不久的將來,基于的瀏覽器將要正式和我們見面啦。 訂閱 / 投稿:https://github.com/txd-team/monthly本期小編:?Hkmu (扶容)?/?x-cold (尹摯) 新聞快報 npm ...
摘要:也能幫你寫代碼了微軟和團隊一起推出擴展,預覽版可以在插件市場直接查找安裝。微軟宣布將采用內核這對于諸多的前端開發(fā)者而言,無疑是本年底最大的福音具體的計劃可以參考官網的博客,在不久的將來,基于的瀏覽器將要正式和我們見面啦。 訂閱 / 投稿:https://github.com/txd-team/monthly本期小編:?Hkmu (扶容)?/?x-cold (尹摯) 新聞快報 npm ...
摘要:前端每周清單半年盤點之與篇前端每周清單專注前端領域內容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點分為新聞熱點開發(fā)教程工程實踐深度閱讀開源項目巔峰人生等欄目。與求同存異近日,宣布將的構建工具由遷移到,引發(fā)了很多開發(fā)者的討論。 前端每周清單半年盤點之 React 與 ReactNative 篇 前端每周清單專注前端領域內容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點;分為...
閱讀 3270·2021-10-11 10:59
閱讀 2836·2021-10-11 10:58
閱讀 2246·2021-09-04 16:45
閱讀 2724·2019-08-30 15:44
閱讀 678·2019-08-30 15:44
閱讀 3206·2019-08-30 10:51
閱讀 1602·2019-08-29 18:46
閱讀 2758·2019-08-29 13:57