<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      使用TS+rollup打造一個npm工具庫

      目錄

      前言

      Why Not TS?

      環境搭建

      工具配置

      編寫代碼

      打包&發布

      總結

      示例代碼

      相關資料


      前言

      說到Rollup,大家可能并不陌生,它是一款JS的模塊打包器,適合對工具庫和組件進行打包,將多個模塊合并成單個文件,與Webpack,Browserify等不太一樣,其對更小更快的庫比較友好。此外,他可以生成ESM、CommonJS、AMD 和 UMD等輸出格式,并且支持TS輸入,可以檢查TS類型及代碼

      Why Not TS?

      近期也在更新TS的文章,tsc是可以直接將TS編譯成指定的JS的,那么為什么不直接使用TS編譯?

      其實在早期編寫工具包的時候使用的是TS編譯,后來為了兼容不同環境產出了這篇文章,用于做Node早期版本以及新版本的適配,然而在使用UMD時出現了問題:

      我們知道在tsconfig中使用"module": "UMD"編譯時,并沒有像官方文檔中的代碼,生成以下的代碼

      (function (root, factory) {
          if (typeof define === "function" && define.amd) {
              define(["libName"], factory);
          } else if (typeof module === "object" && module.exports) {
              module.exports = factory(require("libName"));
          } else {
              root.returnExports = factory(root.libName);
          }
      }(this, function (b) {

      而是生成了下面的代碼,只針對cjs和amd做了適配,導致全局環境中取不到對應的聲明,關于這個在很早就有人提出過

      if (typeof module === "object" && typeof module.exports === "object")
      ...
      else if (typeof define === "function" && define.amd)
      ...

      這對瀏覽器的script形式不太友好。除了這個問題之外,在使用ESM打包后產生的文件引入模塊時不會自動生成.js后綴,需要每次手動補上.js,這使在瀏覽器端使用依賴雪上加霜,參考這篇文章,通過手動增加.js后綴或使用腳本解決此問題

      這些問題驅使我使用起了打包工具

      rollup能夠解決上述的問題,并且使代碼打包更規范統一

      環境搭建

      參照這篇文章配置npm環境,參考這篇文章安裝TS

      在工具庫或新文件夾中使用pnpm init初始化

      然后使用pnpm i --save-dev @rollup/plugin-alias @rollup/plugin-json @rollup/plugin-node-resolve @rollup/plugin-typescript rollup rollup-plugin-terser tslib typescript 安裝rollup以及一些常用的開發依賴

      其中

      • @rollup/plugin-alias:在代碼中使用別名來引用模塊。這里我們可以用于給ESM引入.js后綴
      • @rollup/plugin-node-resolve:解析第三方模塊的依賴關系
      • @rollup/plugin-typescript:支持對TypeScript代碼的打包
      • rollup:模塊打包器
      • rollup-plugin-terser:Terser壓縮代碼,減小文件大小
      • tslib:如果在tsconfig中配置了lib就需要使用tslib依賴
      • typescript:使用TS語法和類型系統

      工具配置

      安裝并了解了rollup依賴及插件后,我們就要對打包工具進行配置了

      在根目錄新建rollup.config.js配置文件,輸入以下代碼

      import typescript from "@rollup/plugin-typescript";
      import resolve from "@rollup/plugin-node-resolve";
      import { readFileSync } from "fs";
      import { terser } from "rollup-plugin-terser";
      import alias from "@rollup/plugin-alias";
      const packageJson = JSON.parse(readFileSync("./package.json", "utf8")); // 讀取UMD全局模塊名,在package中定義了
      const pkgName = packageJson.umdModuleName;
      export default {
        input: "src/index.ts",
        output: [
          {
            file: "dist/esm/index.js",
            format: "esm",
          },
          {
            file: "dist/cjs/index.js",
            format: "cjs",
          },
          {
            file: "dist/umd/index.js",
            format: "umd",
            name: pkgName,
            globals: {
              // 配置依賴中的UMD全局變量名
              "event-message-center": "MessageCenter",
              "task-queue-lib": "TaskQueue",
            },
          },
          {
            file: "dist/bundle/index.js",
            format: "iife",
            name: pkgName,
            plugins: [terser()],
          },
        ],
        plugins: [
          typescript({
            tsconfig: "./tsconfig.json",
          }),
          alias({
            resolve: [".js"],
          }),
          resolve(),
        ],
      };
      

      在package中新建腳本命令

      "rollup:build": "rm -fr dist && pnpm rollup -c"

      編寫代碼

      下載兩個工具依賴pnpm i ? event-message-center task-queue-lib

      在index.ts中導出兩個下載的工具event-message-centertask-queue-lib

      export * from "event-message-center"
      export * from "task-queue-lib"
      import eventMessageCenter from "event-message-center"
      import taskQueueLib from "task-queue-lib"
      export default {
          eventMessageCenter,
          taskQueueLib
      }

      打包&發布

      運行pnpm run rollup:build對程序進行打包

      4種模塊類型的文件打的板板正正

      最后通過npm publish進行代碼發布

      安利一波我之前寫的打包工具,現在加入了publish功能,通過 -pub命令可以直接git tag并發布至npm,有興趣的朋友可以試試

      總結

      本文以TS+rollup為例,介紹了安裝配置開發部署一個工具包的全過程,希望對你有幫助

      感謝你看到最后,有什么問題歡迎在評論區留言或私信

      如果喜歡這篇文章還望點贊支持一下博主,謝謝

      示例代碼

      utils-lib-js - npm

      utils-lib-js: JavaScript工具函數,封裝的一些常用的js函數

      相關資料

      簡介 | rollup.js 中文文檔 | rollup.js中文網

      posted @ 2023-03-29 22:15  阿宇的編程之旅  閱讀(366)  評論(0)    收藏  舉報  來源
      主站蜘蛛池模板: 日韩一区二区三区不卡片| b站永久免费看片大全| 国产精品无码无需播放器| 国产做a爱片久久毛片a片| www久久只有这里有精品| 久久综合激情网| 熟女一区二区中文在线| 亚洲熟妇色自偷自拍另类| 中文字幕日韩熟女av| 亚洲人成电影网站色mp4| 色综合久久精品中文字幕| 亚洲五月天一区二区三区| 99久久国产综合精品成人影院 | 九九热免费精品在线视频| 国产999精品2卡3卡4卡| 色哟哟网站在线观看| 日本无码欧美一区精品久久| 日韩卡一卡2卡3卡4卡| 亚洲人成精品久久久久| 亚洲午夜精品久久久久久抢| 国产精品国产精品无卡区| 一区二区三区四区在线不卡高清| 亚洲国产美女精品久久久| 国产精品亚洲五月天高清| 国产午夜福利精品久久不卡| 国产一区二区日韩在线| 国产在线精彩自拍视频| 四虎永久在线精品无码视频| 亚洲区成人综合一区二区| 国产精品无码a∨麻豆| 国产v综合v亚洲欧美久久| 亚洲AV无码东方伊甸园| 中文字幕理伦午夜福利片| 中文字幕无码av不卡一区| 午夜免费啪视频| 忘忧草影视| 精品超清无码视频在线观看| 久久久久青草线蕉亚洲| 日本高清中文字幕一区二区三区 | 国产成人精品av| 亚洲国产精品成人综合色在|