精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

創建一個雙模式跨運行時的 JavaScript 包,你學會了嗎

開發 前端
創建雙模式、跨運行時的 JavaScript 包是一種有益的體驗。它能使你的代碼具有可移植性和可重用性,讓你在不同的 JavaScript 環境中接觸到更多的用戶。雖然會有一些障礙和注意事項,如管理兼容性以及與不同模塊系統和運行時的配合,但利大于弊。

本文將指導你發布雙模式、跨運行時的 JavaScript 包。了解如何創建與 ESM 和 CommonJS 以及 Node.js、Deno 和瀏覽器等不同運行時兼容的庫。

隨著 JavaScript 開發的不斷發展,人們越來越需要能在多種環境中運行的強大依賴包。在本文中,我們將探討如何發布跨運行時、雙模式的 JavaScript 包。這些包彌補了 ESM 和 CommonJS 之間的差距,讓開發人員可以在任何環境下使用相同的包和文檔。

在深入了解之前,讓我們先熟悉一些關鍵概念:

雙模式包

雙模式包旨在與多個 JavaScript 模塊系統(尤其是 ES Modules (ESM) 和 CommonJS (CJS))配合使用。這確保了代碼在各種環境中的可重用性和靈活性。創建雙模式包有幾個好處:

  • 「更廣泛的兼容性」:并非所有項目都已過渡到使用 ESM。雙模式確保你的包可以在仍然依賴于 CommonJS 的項目中使用。
  • 「無縫過渡」:隨著 JavaScript 生態系統逐步轉向 ESM,雙模式包可確保用戶實現無縫過渡,而無需更換包或重構代碼庫。
  • 「減少維護」:雙模式包允許用戶管理單一代碼庫,而無需分別維護 ESM 和 CJS 包。

不過,雙模式并不能保證軟件包在不同的運行環境下都能正常工作,這就帶來了以下問題:

跨運行時包

跨運行時包可在 Deno、瀏覽器和 Node.js 等多種環境中運行。它們旨在為不同運行時提供一致的 API。一個全面的跨運行時包應同時支持 ESM 和 CJS,尤其是因為 Node.js 在很大程度上仍在使用 CommonJS。

如果我們忽略 Node.js 的傳統限制(Node.js 嚴重依賴 CommonJS),我們可以只使用 ES 模塊構建跨運行時包。這將簡化包,但會限制其與舊版 Node.js 項目的兼容性。

Node還是Deno優先

你有兩種主要方法:從 Deno 或 Node.js 開始。Deno 優先方法使用 Deno 的內置工具和 Deno 到Node工具(DNT)。另一方面,Node優先方法使用傳統的構建工具來完成測試、檢查和打包等任務。這種方法是轉換現有 NPM 庫的首選。

Deno優先方法

Deno優先方法依賴于DNT,你可以在GitHub[1]上找到。

該工具通過版本庫中的自定義構建腳本使用。

第一步是建立一個基本的 Deno 庫,準備發布到 deno.land/x。之后,你就可以使用 DNT 了。

「添加腳本」

Deno優先方法的核心是構建流程。下面這個名為 scripts/build_npm.ts 的腳本使用 DNT 創建一個 /npm 文件夾,其中包含一個完整的 NPM 包,可以隨時發布。

該腳本將處理清除 NPM 目錄、復制測試數據和構建軟件包等任務。它還會創建一個完整的 package.json 文件。

讓我們一起來看看吧,請務必閱讀注釋。

import { build, copy, emptyDir } from "./deps.ts";

// Clear NPM directory
await emptyDir("./npm");

// (optional) Copy test data, if you have some
// await copy("tests/data", "npm/esm/tests/data", { overwrite: true });

// This assumes that the entrypoint of your module is ./mod.ts
await build({
  entryPoints: ["./mod.ts"],
  outDir: "./npm",
  shims: {
    deno: "dev",
  },
  /*
  mappings: {
    "<https://deno.land/x/zipjs@v2.7.17/index.js>": {
      name: "@zip.js/zip.js",
      version: "^2.7.17"
    },
  },
  */
  package: {
    // package.json template
    name: "my-library-name",
    version: Deno.args[0],
    description: "My library description.",
    license: "MIT",
    repository: {/* ... */},
    author: "You <your@mail>",
    /* Additional information */
  },
});

// (optional) post build steps, you might want to copy some files?
// ---------------------------------------------------------------
// Deno.copyFileSync("LICENSE", "npm/LICENSE");
// Deno.copyFileSync("README.md", "npm/README.md");

// (optional) Add .npmignore
// ---------------------------------------------------------------
// ensure the test data is ignored in the `.npmignore` file
// so it doesn't get published with your npm package, if relevant
/*
await Deno.writeTextFile(
  "npm/.npmignore",
  "esm/tests/data\nscript/tests/data\n",
  { append: true },
);
*/

現在,你只需運行 deno run -A scripts/build_npm.ts 0.0.1 來構建 0.0.1 版本的 npm 軟件包。所有相關文件都將在 ./npm 中生成。

最后一步是導航到 ./npm 目錄,然后運行 npm publish,就可以了!

「使用 deno.json 更新構建管道流」

要記錄這一構建步驟,可以修改 deno.json 的task部分,將新的 NPM 構建步驟包括在內。下面是一個設置測試和 NPM 構建的配置示例:

{
    /* ... existing configuration ... */
    "tasks": {
        "test": "deno test tests --allow-read",
        "build": "deno run -A scripts/build_npm.ts"
    }
}

現在,運行 deno task build 0.0.1 時將生成 npm 包。

Node優先方法

或者,你也可以選擇Node優先的方法來創建跨運行時包。

第一步是確保你的項目同時支持 ESM 和 CommonJS。這既可以手動完成,也可以使用構建工具來處理。代碼庫最好是非轉譯的 javascript 或 typescript,以便 Rollup 或類似工具處理。

讓我們以 @hexagon/base64 庫為例進行分析。該庫使用 Rollup 生成 ESM 和 CommonJS 版本的代碼,配置如下:

// rollup.config.js
export default [
 {
  input: "./src/base64.single.js",
  output: {
   file: "dist/base64.cjs",
   format: "umd",
   name: "base64",
   exports: "default"
  }
 },
 { 
  input: "./src/base64.js",
  output: {
   file: "dist/base64.mjs",
   format: "es"
  }
 }
];

該庫的源代碼(/src/base64.js)是以各種方式導出 base64 對象的普通 ES JavaScript。

// src/base64.js
/* ...
   Library code making up the base64 object
   ... */

// Default export
export default base64;

// Named export
export { base64 };

Rollup 無法處理多重導出,因此我還創建了一個 /src/base64.single.js,默認情況下它只負責重新導出 base64 對象。這是 Rollup 配置的 UMD 目標所使用的。

// /src/base64.single.js
import base64 from "./base64.js";
export default base64;

package.json

package.json 文件是設置雙模式、跨運行時 JavaScript 包的關鍵。它決定了包在不同環境中的結構和行為方式。讓我們來仔細看看其中的關鍵部分及其重要性:

{
  /* ... your metadata ... */

  "scripts": {
    /* ... your existing build steps ... */
    "build:dist": "rollup -c ./rollup.config.js",
  },

  "type": "module",

  "main": "./dist/base64.cjs",
  "browser": "./dist/base64.min.js",
  "module": "./src/base64.js",
  "types": "types/base64.single.d.ts",

  "exports": {
    ".": {
      "import": "./src/base64.js",
      "require": "./dist/base64.cjs",
      "browser": "./dist/base64.min.js"
    }
  }
}
  • 「"scripts"」 :該部分包含構建和管理包所需的腳本。在提供的示例中,"build:dist"用于觸發 Rollup 打包過程。根據包的具體要求,你可能還需要其他腳本來進行測試、檢查或執行其他任務。
  • 「"type"」 :該字段設置為"module",表示你的包是為使用 ESM(ES 模塊)導入而設計的。
  • 「"main"」 :該字段指定了 CommonJS 環境(如 Node.js)的入口點。它指向包的 CommonJS 版本,通常位于 dist 目錄中。
  • 「"browser"」 :該字段用于指定瀏覽器環境的替代入口點。它指向包的最小化版本,以增強與瀏覽器的兼容性。
  • 「"module"」 :與 "main"字段類似,該字段用于指定 ESM 環境的入口點。它指向軟件包的 ESM 版本。
  • 「"types"」 :此字段指明軟件包的 TypeScript 聲明文件(.d.ts)的位置。這些文件為 TypeScript 用戶提供了類型信息,改善了開發人員的體驗。
  • 「"exports"」 :該字段是一項最新功能,允許你定義如何導入包。它為 ESM、CommonJS 和瀏覽器環境指定了不同的導入路徑,確保了跨運行時的流暢兼容性。

根據包的具體需求和配置,你可能需要對 package.json 進行或多或少的修改。仔細調整和測試該文件以確保其在發布時正常運行至關重要。

跨運行時部分

前面提到的步驟主要是在 Node.js 中設置雙模式兼容性。雖然 Deno 可以使用開箱即用的 npm 軟件包,但要創建一個完整的跨運行時包,你還應該將其適配到 Deno。

這包括閱讀 Deno 庫的工作原理[2]、將軟件包發布到 deno.land/x[3]。

還有就是,讓你的軟件包成為雙模式軟件也能幫助其他項目。

總結

創建雙模式、跨運行時的 JavaScript 包是一種有益的體驗。它能使你的代碼具有可移植性和可重用性,讓你在不同的 JavaScript 環境中接觸到更多的用戶。雖然會有一些障礙和注意事項,如管理兼容性以及與不同模塊系統和運行時的配合,但利大于弊。

本文譯自:https://hexagon.56k.guru/posts/dual-mode-cross-runtime-packages/

以上就是本文的全部內容,如果對你所有幫助,歡迎點贊、收藏、轉發~

參考資料

[1]GitHub:https://github.com/denoland/dnt

[2]Deno 庫的工作原理:https://deno.land/manual@v1.36.4/introduction

[3]將軟件包發布到 deno.land/x:https://deno.land/manual@v1.36.4/advanced/publishing

責任編輯:武曉燕 來源: 前端F2E
相關推薦

2023-11-26 00:34:36

Javascript應用方法

2024-03-06 08:28:16

設計模式Java

2021-10-04 09:29:41

對象池線程池

2023-09-19 08:03:50

rebase?merge

2024-06-21 08:15:25

2024-06-19 09:47:21

2023-03-26 22:02:53

APMPR監控

2023-04-27 08:42:50

效果

2023-06-26 00:01:11

2024-11-28 10:09:06

2025-04-02 08:03:53

云效賬號阿里云

2022-02-08 09:09:45

智能指針C++

2024-04-01 08:13:59

排行榜MySQL持久化

2023-10-26 07:15:46

2024-09-04 08:40:51

2023-07-10 07:17:29

無效化空窗口

2022-07-08 09:27:48

CSSIFC模型

2024-01-19 08:25:38

死鎖Java通信

2023-01-10 08:43:15

定義DDD架構

2024-02-04 00:00:00

Effect數據組件
點贊
收藏

51CTO技術棧公眾號

久在线观看视频| 国产精品一区二区三区av麻| 欧美在线国产| 欧美午夜久久久| 欧美日韩电影在线观看| av网址在线观看免费| 亚洲经典一区二区三区| 啪啪亚洲精品| 在线精品亚洲一区二区不卡| 精品欧美一区二区精品久久| 日韩在线观看视频一区二区| 欧美色网在线| 91天堂素人约啪| 久久人人爽人人| 国产精品19p| 东凛在线观看| 日韩影视高清在线观看| 亚洲国产美女搞黄色| 91欧美精品午夜性色福利在线| 国产精品无码久久久久一区二区| av女在线播放| 成人福利电影精品一区二区在线观看 | 国产午夜精品一区理论片飘花| 91成人在线观看喷潮教学| 亚洲AV无码精品色毛片浪潮| 久久亚洲国产精品一区二区| 亚洲精品视频二区| 日本三级免费观看| 青青草视频在线观看| 在线综合亚洲| 亚洲老头同性xxxxx| 毛片av免费在线观看| 白白色在线观看| 91蜜桃在线观看| 97se亚洲综合在线| 人人干人人干人人干| 青青久久av| 91精品1区2区| 亚洲最新免费视频| 亚洲天堂视频网站| 最新国产一区| 亚洲国产第一页| 日本免费一级视频| 狠狠操一区二区三区| 国产午夜亚洲精品羞羞网站| 国产精品主播视频| 欧美第一页在线观看| 日韩欧美在线中字| 日韩亚洲电影在线| 69堂免费视频| 91九色在线播放| 亚洲国产成人av| 成人免费a级片| 欧美色图另类| 麻豆成人综合网| 欧美夫妻性生活视频| 久久无码人妻精品一区二区三区| 78精品国产综合久久香蕉| 中文字幕一区二区三区在线观看 | 69视频免费在线观看| 亚洲精品极品| 中文欧美日本在线资源| 无套白嫩进入乌克兰美女| a国产在线视频| 亚洲超丰满肉感bbw| 欧美亚洲免费在线| 影音先锋国产在线| 欧美高清日韩| 欧美大片免费看| 久久精品一级片| 国产精品一线天粉嫩av| 亚洲视频在线播放| 国产在线不卡av| 亚洲网站三级| 欧美天堂在线观看| 手机看片福利盒子久久| 九色91在线| 国产精品福利av| 综合国产精品久久久| 亚洲按摩av| 中文字幕欧美区| 久久久国产精品一区二区三区| 亚洲一区二区影视| 国产一区二区三区免费在线观看| 日本不卡高字幕在线2019| avove在线播放| 日韩精品一区二区三区免费观看| 日韩中文字幕视频在线| 五月天综合视频| 日本欧美三级| 在线观看久久久久久| 一女三黑人理论片在线| 精品中文一区| 麻豆国产精品va在线观看不卡 | 日韩在线亚洲| 欧美日韩国产中文| 日韩欧美xxxx| 伊人久久大香线蕉综合影院首页| 精品国产网站在线观看| 在线视频观看91| 欧美黄色a视频| 在线观看日韩高清av| 成人免费黄色av| 亚洲品质自拍| 亚洲免费人成在线视频观看| 污污视频网站在线免费观看| 精品一区二区三区在线 | 成人疯狂猛交xxx| 中文字幕+乱码+中文乱码91| 国产成a人无v码亚洲福利| 91亚洲va在线va天堂va国| 色噜噜在线播放| 成人av在线一区二区三区| 区一区二区三区中文字幕| 八戒八戒神马在线电影| 亚洲人成网站精品片在线观看| 亚洲电影一二三区| 欧美边添边摸边做边爱免费| 国产精品女同一区二区三区| 日韩欧美一区二区三区四区| 免费播放片a高清在线观看| 国产精品久久久一区麻豆最新章节| 免费特级黄色片| 白浆视频在线观看| 88在线观看91蜜桃国自产| 国产福利精品一区二区三区| 欧美色图五月天| 欧美黑人xxx| 国产一区二区自拍视频| 国产一区在线观看麻豆| 欧美高清性xxxxhd| 不卡视频观看| 亚洲国产美女精品久久久久∴| 国产女人18毛片水真多18 | japanese在线播放| 欧美巨大xxxx做受沙滩| 欧美精品一级二级| 91人人澡人人爽| 青草久久视频| 久久免费福利视频| 亚洲老妇色熟女老太| 专区另类欧美日韩| 国自产拍偷拍精品啪啪一区二区| 欧美激情三级| 日韩高清欧美高清| 少妇高潮惨叫久久久久| 综合天天久久| 91国产在线精品| 中文区中文字幕免费看| 久久视频一区二区| 色乱码一区二区三区熟女| 国产a亚洲精品| 最新国产精品亚洲| 国产午夜福利精品| 欧美aⅴ一区二区三区视频| 97人人模人人爽人人少妇| 18加网站在线| 欧美在线影院一区二区| 欧美18—19性高清hd4k| 激情亚洲网站| 国产伊人精品在线| 四季av日韩精品一区| 亚洲国产精品久久不卡毛片| www.日本高清| 亚洲欧美亚洲| 国产精品一区在线观看| av在线电影免费观看| 亚洲综合免费观看高清完整版在线 | 国产精品极品美女在线观看免费| 国产av精国产传媒| 国产人久久人人人人爽| 欧美这里只有精品| 婷婷激情久久| 国产精品狼人色视频一区| 成人午夜免费在线观看| 国产精品乱码久久久久久| 色婷婷狠狠18| 你懂的视频欧美| 国产精品久久中文| 伊人影院蕉久影院在线播放| 亚洲国产日韩欧美在线图片| 中文字幕xxxx| 91啪亚洲精品| 日韩一区二区三区不卡视频| 综合久久一区| 奇米视频888战线精品播放| 精品乱码一区二区三区四区| 欧美高清性猛交| 毛片在线播放网站| 日韩一区二区电影在线| 日本三级小视频| 成人小视频免费观看| 国产精品夜夜夜爽张柏芝| 香蕉成人app| 国产91精品最新在线播放| 午夜一区在线观看| 亚洲电影一区二区三区| 国产熟妇久久777777| 国产资源在线一区| 一本大道熟女人妻中文字幕在线| 一区二区三区在线免费看| 中文字幕亚洲欧美日韩2019| 99国产精品久久久久99打野战| 国产精品色哟哟| 亚洲美女在线播放| 加勒比av一区二区| 大桥未久一区二区| 日日夜夜一区| 久久精品99久久久香蕉| 国产一区二区麻豆| 精品日韩视频在线观看| 无码精品一区二区三区在线播放| 蜜桃视频一区二区三区在线观看 | 精品人妻少妇嫩草av无码| 99综合视频| 青青草原国产免费| 国产最新精品| 免费一区二区三区| 日日夜夜天天综合| 午夜精品一区二区三区在线视| 丰满岳乱妇国产精品一区| 欧美在线小视频| 日韩三级视频在线播放| 亚洲丝袜美腿综合| 又嫩又硬又黄又爽的视频| 91丝袜美腿高跟国产极品老师 | 国内自拍中文字幕| 婷婷成人基地| 99精彩视频在线观看免费| caopon在线免费视频| 正在播放欧美视频| 国产一级网站视频在线| 欧美精品视频www在线观看| 4438国产精品一区二区| 国产精品入口麻豆原神| 极品白嫩丰满美女无套| 成人免费av资源| 波多野结衣网页| 国产综合色视频| 91女神在线观看| 韩国亚洲精品| 欧美日韩一区二区三区在线视频| 高潮按摩久久久久久av免费| 日本亚洲欧美成人| 日本在线啊啊| 主播福利视频一区| 国产黄色免费在线观看| 亚洲人高潮女人毛茸茸| 欧洲毛片在线| 国产一区二区三区毛片| 黄色av免费在线观看| 国产亚洲精品成人av久久ww| 国产经典自拍视频在线观看| 夜夜嗨av一区二区三区免费区| 国产黄色片在线观看| 一本一道久久a久久精品逆3p| 国产精品影院在线| www.日韩av.com| 在线xxxx| 午夜精品www| 日本高清不卡一区二区三区视频| 日本久久亚洲电影| 国产精品原创视频| 亚洲a级在线播放观看| 台湾佬成人网| 精品剧情在线观看| 波多野结衣视频在线看| 中文字幕日韩av资源站| 天天操天天操天天操天天操天天操| 亚洲精品免费在线观看| 在线免费黄色网| 伊人精品成人久久综合软件| 日韩精品视频在线观看视频 | 欧美激情在线观看| 日韩在线免费电影| 亚洲精品自产拍| 国产精品一区二区三区四区色| 日韩一区二区av| 伦理在线一区| 国产成人精品免高潮在线观看| 男女在线观看视频| 日本欧美黄网站| 国产精品视频一区二区三区| 国产精品免费一区| 看亚洲a级一级毛片| 久久99导航| 五月天久久久| 北条麻妃69av| 狠狠网亚洲精品| 青青草视频成人| 亚洲免费资源在线播放| 国产又大又粗又爽| 日韩视频一区在线观看| 暖暖视频在线免费观看| 九九精品视频在线| 在线国产成人影院| 国产另类自拍| 五月综合激情| 日本黄网站免费| 成人综合激情网| 日韩亚洲欧美中文字幕| 色综合一个色综合| 日本一区二区免费电影| 日韩欧美一区二区视频| 草逼视频免费看| 亚洲第一精品福利| 久久精品视频免费看| 久久久精品欧美| 精品国产第一福利网站| 日韩免费在线看| 国产精品白丝av嫩草影院| 国产又粗又硬又长| 免费久久99精品国产| 人妻丰满熟妇av无码久久洗澡 | 不用播放器成人网| 91tv亚洲精品香蕉国产一区| 国产精品国产三级国产aⅴ浪潮| 视频一区在线| 大地资源第二页在线观看高清版| 久久一区亚洲| av小说在线观看| 欧美日韩国产丝袜另类| 老司机午夜福利视频| 欧美黑人巨大xxx极品| japansex久久高清精品| 亚洲精品人成| 日韩和欧美的一区| 日韩欧美中文视频| 国产精品看片你懂得| 高潮无码精品色欲av午夜福利| 欧美精品丝袜中出| 一级毛片视频在线| 国产精品男人的天堂| 国产一区二区在线| 三级4级全黄60分钟| 久久影视一区二区| 性色av免费观看| 亚洲人成人99网站| 三上悠亚亚洲一区| 日本一区二区精品| 日本欧美一区二区三区| 成人免费播放视频| 亚洲欧美电影院| 99国产精品99| 欧美老女人xx| www.亚洲一二| 国内精品久久国产| 成人在线免费观看网站| 久久久久久久久久伊人| 美女被久久久| 日本中文字幕影院| 91女神在线视频| 黄色在线免费观看| 在线免费看av不卡| 国产精品18| www.av蜜桃| 91老司机福利 在线| 日本中文字幕在线观看视频| 在线免费观看羞羞视频一区二区| 99精品在免费线偷拍| 91香蕉视频网址| 成人午夜av在线| 国产一级淫片a视频免费观看| 在线电影欧美日韩一区二区私密| 亚洲一区二区三区久久久| 4444在线观看| 91亚洲永久精品| 久久久久久久久久久久国产| 在线观看国产精品网站| 欧美激情二区| 国产精品免费一区二区| 欧美中文日韩| 手机在线中文字幕| 色94色欧美sute亚洲线路二 | 西瓜成人精品人成网站| 性生交免费视频| 91视频xxxx| 中文av免费观看| 久久久久久97| 欧美日韩精品在线一区| 久久综合桃花网| 欧美性黄网官网| dj大片免费在线观看| 国产精品国产精品国产专区蜜臀ah| 另类天堂av| 欧美丰满艳妇bbwbbw| 亚洲欧美日韩国产成人| 秋霞一区二区| 欧美伦理片在线看| 亚洲一区二区三区在线| 国产富婆一级全黄大片| 91成人性视频| 亚洲色图欧美| 欧美特级黄色录像| 精品国产人成亚洲区| 欧美日韩国产网站| 国产欧美日韩网站| 99久久伊人网影院| 在线观看黄网站| 色婷婷久久一区二区|