亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

基于rollup打造前端工具庫(kù)的實(shí)踐

BaronZhang / 2727人閱讀

摘要:獲取參數(shù)總結(jié)這里我主要總結(jié)了我開(kāi)發(fā)工具庫(kù)所用到的一些實(shí)踐,參考了不少開(kāi)源的項(xiàng)目,寫(xiě)的比較匆忙,有些細(xì)節(jié)可以參考源代碼,如果有不合理的地方盡情吐槽,共同進(jìn)步。

基于rollup打造前端工具庫(kù)的實(shí)踐

老生常談工具庫(kù),每個(gè)公司都應(yīng)該需要一個(gè)工具庫(kù)去處理一些公共重復(fù)的代碼,比如公共函數(shù),ajax,微信sdk,本地存儲(chǔ)等等,目前構(gòu)建工具大行其道,我覺(jué)得是時(shí)候擺脫復(fù)制粘貼的代碼了,這里我對(duì)基于rollup構(gòu)建工具庫(kù)進(jìn)行了一個(gè)總結(jié)(相比webpack更加配置簡(jiǎn)單,代碼也清晰很多吧),更多是項(xiàng)目的組織,畢竟具體的代碼每個(gè)公司都有自己的業(yè)務(wù)需求,希望能夠幫助到大家。

目錄結(jié)構(gòu)
├── .git
├── .gitignore
├── .npmignore
├── LICENSE                      協(xié)議
├── coverage                     代碼覆蓋率文件
├── docs                         文檔
├── index.html                   測(cè)試html
├── lib                          引用的入口文件
├── node_modules
├── package-lock.json
├── package.json
├── readme.md                    說(shuō)明文檔
├── rollup.config.js             rollup配置文件
├── scripts                      構(gòu)建腳本
├── src                          開(kāi)發(fā)目錄
├── test                         測(cè)試用例
└── yarn.lock

這是最終的項(xiàng)目目錄結(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.jsrollup的主要配置文件,這里我主要將代碼打包成瀏覽器直接使用的umd格式和打包工具使用的esm格式。
最終會(huì)生成

lib
  z.esm.js  webpack等工具import,支持tree shaking按需加載
  z.min.js  script標(biāo)簽引入
開(kāi)發(fā)

我這邊將開(kāi)發(fā)的具體代碼放在src中,入口為main.js,每個(gè)功能模塊是一個(gè)目錄,有個(gè)入口文件index.js方便進(jìn)行單元測(cè)試,然后只有針對(duì)一個(gè)方法建立一個(gè)文件就可以了,已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, " "));
  }
測(cè)試

好的工具庫(kù)缺少不了測(cè)試,這里我采用的是jest, 個(gè)人認(rèn)為jest的集成度更高,語(yǔ)法也簡(jiǎn)單,內(nèi)置的代碼覆蓋率檢查很快就可以上手。我們只需要對(duì)每個(gè)功能模塊進(jìn)行測(cè)試代碼的編寫(xiě)就可以了。

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"})
      })
    })
  })

測(cè)試結(jié)果:

測(cè)試覆蓋率:

文檔

為了使文檔能夠自動(dòng)化生成,主要采用了jsdoc-to-markdown,只需要在每個(gè)方法上寫(xiě)上注釋的代碼,就能自動(dòng)化的生成對(duì)應(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é)了我開(kāi)發(fā)工具庫(kù)所用到的一些實(shí)踐,參考了不少開(kāi)源的項(xiàng)目,寫(xiě)的比較匆忙,有些細(xì)節(jié)可以參考源代碼,如果有不合理的地方盡情吐槽,共同進(jìn)步。

項(xiàng)目地址:地址
開(kāi)發(fā)環(huán)境: MacOS

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/92802.html

相關(guān)文章

  • 前端小報(bào) - 201812 月刊

    摘要:也能幫你寫(xiě)代碼了微軟和團(tuán)隊(duì)一起推出擴(kuò)展,預(yù)覽版可以在插件市場(chǎng)直接查找安裝。微軟宣布將采用內(nèi)核這對(duì)于諸多的前端開(kāi)發(fā)者而言,無(wú)疑是本年底最大的福音具體的計(jì)劃可以參考官網(wǎng)的博客,在不久的將來(lái),基于的瀏覽器將要正式和我們見(jiàn)面啦。 訂閱 / 投稿:https://github.com/txd-team/monthly本期小編:?Hkmu (扶容)?/?x-cold (尹摯) 新聞快報(bào) npm ...

    Coding01 評(píng)論0 收藏0
  • 前端小報(bào) - 201812 月刊

    摘要:也能幫你寫(xiě)代碼了微軟和團(tuán)隊(duì)一起推出擴(kuò)展,預(yù)覽版可以在插件市場(chǎng)直接查找安裝。微軟宣布將采用內(nèi)核這對(duì)于諸多的前端開(kāi)發(fā)者而言,無(wú)疑是本年底最大的福音具體的計(jì)劃可以參考官網(wǎng)的博客,在不久的將來(lái),基于的瀏覽器將要正式和我們見(jiàn)面啦。 訂閱 / 投稿:https://github.com/txd-team/monthly本期小編:?Hkmu (扶容)?/?x-cold (尹摯) 新聞快報(bào) npm ...

    jsliang 評(píng)論0 收藏0
  • 前端小報(bào) - 201812 月刊

    摘要:也能幫你寫(xiě)代碼了微軟和團(tuán)隊(duì)一起推出擴(kuò)展,預(yù)覽版可以在插件市場(chǎng)直接查找安裝。微軟宣布將采用內(nèi)核這對(duì)于諸多的前端開(kāi)發(fā)者而言,無(wú)疑是本年底最大的福音具體的計(jì)劃可以參考官網(wǎng)的博客,在不久的將來(lái),基于的瀏覽器將要正式和我們見(jiàn)面啦。 訂閱 / 投稿:https://github.com/txd-team/monthly本期小編:?Hkmu (扶容)?/?x-cold (尹摯) 新聞快報(bào) npm ...

    zhangrxiang 評(píng)論0 收藏0
  • 前端每周清單半年盤(pán)點(diǎn)之 React 與 ReactNative 篇

    摘要:前端每周清單半年盤(pán)點(diǎn)之與篇前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開(kāi)發(fā)者了解一周前端熱點(diǎn)分為新聞熱點(diǎn)開(kāi)發(fā)教程工程實(shí)踐深度閱讀開(kāi)源項(xiàng)目巔峰人生等欄目。與求同存異近日,宣布將的構(gòu)建工具由遷移到,引發(fā)了很多開(kāi)發(fā)者的討論。 前端每周清單半年盤(pán)點(diǎn)之 React 與 ReactNative 篇 前端每周清單專注前端領(lǐng)域內(nèi)容,以對(duì)外文資料的搜集為主,幫助開(kāi)發(fā)者了解一周前端熱點(diǎn);分為...

    Barry_Ng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<