国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

開發更好用的 JavaScript 模塊

瀏覽:4日期:2023-11-11 16:17:39

開發更好用的 JavaScript 模塊

不少人都曾經在 npm 上發布過自己開發的 JavaScript 模塊,而在使用一些模塊的過程中,我經常產生“這個模塊很有用,但如果能 xxx 就更好了”的想法。所以,本文將站在模塊使用者的角度總結一下,如何能讓模塊變得更好用。

提供 ES6 模塊的入口

webpack 和 rollup 都支持對 ES6 模塊做一些靜態優化(例如 Tree Shaking 和Scope Hoisting),它們都會優先讀取 package.json 中的 module 字段作為 ES6 模塊的入口,若沒有 module 才會讀取 main 字段作為 CommonJS 模塊的入口。通常的做法是:使用 ES6 語法編寫源碼,然后用模塊打包工具結合語法轉換工具生成 CommonJS 模塊和 ES6 模塊,這樣就可以同時提供 main 和 module 字段了。

提供 TypeScript 的類型聲明文件

如果你的用戶使用了 TypeScript 但你的模塊沒有提供聲明文件,他們就不得不在項目中添加一段代碼避免 TypeScript 的編譯錯誤;另外,這樣做并不只是對使用 TypeScript 的用戶友好,因為大部分代碼編輯器(Webstorm、VS Code 等)都能識別 TypeScript 的類型聲明,它們可以據此提供更精準的代碼提示并在用戶傳入錯誤的參數個數或類型時給出提示。

最好的做法是使用 TypeScript 編寫你的模塊,編譯時會自動生成類型聲明。除此之外,你也可以參照 文檔 手動維護一份聲明文件。你可以在你的模塊根目錄下添加 index.d.ts 文件,或者在 package.json 中聲明 typings 字段提供聲明文件的位置。

讓模塊同時在 Node.js 與瀏覽器中運行

你可以通過檢測是否有名為 window 的全局變量(例如 !!typeof window )來判斷模塊當前是運行在 Node.js 還是瀏覽器中,然后使用不同的方式實現你的功能。

這種方法比較常見,但如果用戶使用了模塊打包工具,這樣做會導致 Node.js 與瀏覽器的實現方式都會被包含在最終的輸出文件中。針對這個問題,開源社區提出了在 package.json 中添加 browser 字段的 提議 ,目前 webpack 和 rollup 都已經支持這個字段了。

browser 字段有兩種使用方式:

給 browser 字段提供一個文件路徑作為在瀏覽器端使用時的模塊入口,但需要注意的是,打包工具會優先使用 browser 字段指定的文件路徑作為模塊入口,所以你的 module 字段會被忽略,這會導致打包工具不會優化你的代碼。詳細信息請參考 這個問題 。 如果你只想替換其中一些文件,你可以聲明一個對象。

舉個例子,假設你的模塊里有兩個文件: http.js 和 xhr.js ,第一個文件使用 Node.js 中的 http 模塊發起請求,另一個使用瀏覽器中的 XMLHTTPRequest 實現了同樣的功能。為了使用適當的文件,你的模塊代碼中應該始終 require(’./path/to/http.js’) ,并在 package.json 中聲明:

{ 'browser': { './path/to/http.js': './path/to/xhr.js' }}

這樣一來,當你的模塊在打包工具中使用時,打包工具只會將 xhr.js 的代碼包含在最終的輸出文件中。

使用各種服務武裝你的項目

大部分 JavaScript 項目都是開源的,而開源社區也提供了很多針對開源項目的免費服務,它們可以給你的項目提供更有力的幫助,這里列舉幾個比較常用的。

一個項目最常使用的服務就是持續集成了。持續集成服務能將測試、代碼風格檢測、打包等任務放在服務器上,并在你提交代碼時自動運行,常用的有 Travis CI 、 CircleCI 和 AppVeyor 。Travis CI 對開源項目免費,提供 Linux 與 OS X 運行環境;CircleCI 對開源與私有項目都免費,但每個月有 1500 分鐘的運行時間限制;AppVeyor 提供 Windows 運行環境,同樣對開源項目免費。

運行完測試之后,你還可以將測試覆蓋率上傳到 Coveralls 。這個服務能讓你在線瀏覽代碼的測試覆蓋情況。

如果你想讓你的模塊在各個版本的各種瀏覽器、平臺下得到充分的測試,你還可以使用 Sauce Labs 和 BrowserStack ,它們都是對開源項目免費的,但需要發郵件申請。

最后, Shields IO 提供了各種圖標,這些圖標能為你的項目提供很多額外信息,包括但不限于 npm 版本號、下載量、測試通過狀態、測試覆蓋率、文件大小、依賴是否過期等。

雖然以上的建議大多屬于錦上添花,但這會讓你的模塊對用戶更加友好,希望以上的建議能在你開發自己的模塊時給你一點幫助。

來自:https://zhuanlan.zhihu.com/p/31499310

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 亚洲国产成人久久精品影视 | 欧美日韩国产亚洲综合不卡 | 美女被拍拍拍拍拍拍拍拍 | 免费黄色美女视频 | 欧美精品做人一级爱免费 | 玖玖玖视频在线观看视频6 玖玖影院在线观看 | 精品日韩欧美一区二区三区在线播放 | 国产精品久久久久激情影院 | 中文字幕无线精品乱码一区 | 国产专区一va亚洲v天堂 | 亚欧人成精品免费观看 | 欧美成人免费在线 | 五月激情丁香婷婷综合第九 | 在线观看日本免费视频大片一区 | 久久e| 中文字幕一区二区三区精品 | 精品免费久久久久国产一区 | 99精品国产免费久久国语 | 久久精品国产精品亚洲毛片 | 日本人一级毛片免费视频 | 在线观看人成网站深夜免费 | 美女视频永久黄网站免费观看韩国 | 一级一级特黄女人精品毛片 | 国产玖玖视频 | 久久久久久一级毛片免费野外 | 日韩欧美一级毛片视频免费 | 在线免费黄色网址 | 国产一区二区在线观看视频 | 国产精品区在线12p 国产精品人成 | 99在线免费视频 | 欧美精品一区二区在线观看 | 九九夜色 | 三级黄色在线观看 | 大学生一级一片第一次欧美 | 国产乱纶 | 免费在线精品视频 | 国产成人精品无缓存在线播放 | 国产精品日韩欧美一区二区三区 | 韩国一级片视频 | 日韩美女在线看免费观看 | 午夜视频在线观看一区二区 |