国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基于rollup打造前端工具庫的實踐

BaronZhang / 2680人閱讀

摘要:獲取參數總結這里我主要總結了我開發(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.jsrollup的主要配置文件,這里我主要將代碼打包成瀏覽器直接使用的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

相關文章

  • 前端小報 - 201812 月刊

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

    Coding01 評論0 收藏0
  • 前端小報 - 201812 月刊

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

    jsliang 評論0 收藏0
  • 前端小報 - 201812 月刊

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

    zhangrxiang 評論0 收藏0
  • 前端每周清單半年盤點之 React 與 ReactNative 篇

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

    Barry_Ng 評論0 收藏0

發(fā)表評論

0條評論

BaronZhang

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<