最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

前端程序員一定要掌握的package.json指南

2023-08-04 12:04 作者:路過的前端程序員  | 我要投稿

前言

package.json 是一個用于描述和配置項目的重要文件,其中包含了許多字段和選項,可以影響項目的構(gòu)建、依賴管理、腳本執(zhí)行等方面。了解這些字段可以幫助開發(fā)者更好地理解和控制項目的行為。

package.json對于大部分前端開發(fā)者來說,知道dependencies與devDependencies就夠了。但對于庫開發(fā)者或有更高級需求的開發(fā)者來說,了解 package.json 的其他字段是非常有必要的。

本文介紹的字段分為官方字段與非官方字段。非官方字段是被主流打包工具(webpack,Rollup)所支持, 旨在提供更高級的配置和功能,以滿足特定的構(gòu)建需求,可能不具備通用性。

目前版本:v7.24.2

一、必須屬性

1. ?name

定義項目的名稱,不能以"."和"_"開頭,不能包含大寫字母

2. version

定義項目的版本號,格式為:大版本號.次版本號.修訂號

二、描述信息

1. ?description

項目描述

2. keywords

項目關(guān)鍵詞

3. author

項目作者

"author": "name (http://barnyrubble.tumblr.com/)"

4. contributors

項目貢獻者

?"contributors": [ ? ? "name <b@rubble.com> (http://barnyrubble.tumblr.com/)" ? ]

5. homepage

項目主頁地址

6. repository

項目代碼倉庫地址

7. bugs

項目提交問題的地址

?//提交問題的地址和反饋的郵箱,url通常是Github中的issues頁面 "bugs": { ? ?"url" : "https://github.com/facebook/react/issues", ? ?"email" : "xxxxx@xx.com" }

8. funding

指定項目的資金支持方式和鏈接

?"funding": { ? ? "type": "patreon", ? ? "url": "https://www.patreon.com/my-module" ? }

三、依賴配置

1. dependencies

生產(chǎn)環(huán)境的依賴包

如果不使用脫字符(^),安裝的版本號固定;如果使用,則能安裝當前大版本的最新版本,在package-lock.json中可查看當前實際安裝的版本。

2. devDependencies

開發(fā)環(huán)境的依賴包,例如webpack、vite、babel、ESLint等。

3. peerDependencies

對等依賴的作用:

  1. 減小打包體積:例如使用react開發(fā)的組件庫,安裝react是必不可少的,而使用組件庫的開發(fā)者,本地項目肯定安裝了react,因此開發(fā)的組件庫中不必把react打包進去(期望項目的使用者來提供這些模塊的實現(xiàn))。

  2. 版本一致性:使用你的組件庫的開發(fā)者需要確保他們項目中安裝了與你聲明的對等依賴版本兼容的包,以確保組件庫正常運行。

示例:聲明要使用組件庫,需在項目中安裝大于17.0.1版本的react

?"peerDependencies": { ? ? "react": ">17.0.1" ? }

4. peerDependenciesMeta

將對等依賴標記為可選,如果用戶沒有安裝對等依賴,npm不會發(fā)出警告

?"peerDependenciesMeta": { ? ? "react": { ? ? ? "optional": true //標記為可選 ? ? } ? }

5. bundledDependencies

聲明捆綁依賴項(使用情景較少)

6. optionalDependencies

聲明可選依賴項(使用情景較少)

7. engines

聲明對npm或node的版本要求

?"engines": { ? ? "node": ">=8.10.3 <12.13.0", ? ? "npm": ">=6.9.0" ? }

engines只是起一個說明的作用,即使用戶安裝的版本不符合要求,也不影響依賴包的安裝。

8. workspaces

單個代碼庫中統(tǒng)一管理多個包(monorepo),在workspaces聲明目錄下的package會軟鏈到根目錄的node_modules中。

1. 初始化項目

npm init -y

2. 聲明本項目是workspaces模式

?"private":"true", ? "workspaces": [ ? ? "packages/*" ? ?],

表示所有子包都在packages文件夾下

3. 創(chuàng)建子包p1

npm init -w packages/p1 -y

在node_modules/.package-lock.json中可以看到 "link": true 鏈接符號信息

4. 新建packages/p1/index.js

module.exports = "p1包";

5. 創(chuàng)建子包p2

npm init -w packages/p2 -y

6. 將子包p1添加到p2中

npm i p1 -w p2

安裝,卸載等命令都是一樣的,只是多了"--workspace="參數(shù)(簡寫-w),用來指定在哪個包中執(zhí)行命令

7. 子包p2使用p1

const p1 = require("p1"); ?console.log("使用", p1); ?module.exports = "p2包";

workspaces功能與lerna類似,如果只需簡單地管理多個包,workspaces足夠了。lerna具有版本管理,發(fā)包提示,簡化多包項目發(fā)布流程等更多功能。

四、腳本配置

1. scripts

腳本入口

2. config

用于定義項目的配置項,例如設(shè)置環(huán)境變量

1. config 配置

?"config": { ? ? "baseUrl": "https://example.com" ? }

2. scripts 配置

?"scripts": { ? ? "start": "node index.js", ? },

3. 新建index.js

//使用process.env.npm_package_config_XXX取值 console.log(process.env.npm_package_config_baseUrl)

運行 npm run start,終端打印出 example.com

五、文件&目錄

1. module(非官方字段)

指定 ES 模塊入口文件

示例:當其他開發(fā)者在他們的項目中導(dǎo)入你的包時,會加載并執(zhí)行包中的dist/index.esm.js

"main": "dist/index.esm.js"

2. main

指定 CommonJS 模塊或 ES 模塊入口文件。如果不指定該字段,默認是根目錄下的index.js

提示:從 Node.js 12.20.0 版本開始,"main" 字段也可以指定 ES 模塊的入口文件

3. browser

指定瀏覽器使用的入口文件,例如umd模塊。

4. types(非官方字段)

指定 TypeScript 類型聲明文件(.d.ts 文件)的路徑

5. exports(非官方字段)

當打包工具支持exports字段時(webpack、Rollup 等),以上main,browser,module,types四個字段都被忽略

"." 表示默認導(dǎo)出

"import": 指定了 ES module (ESM) 規(guī)范下的導(dǎo)出文件路徑

"require": 指定了 CommonJS 規(guī)范下的導(dǎo)出文件路徑

"browser": 指定了用于瀏覽器環(huán)境的導(dǎo)出文件路徑

"types": 指定了類型聲明文件的路徑

?"exports": { ? ? ".": { ? ? ? "import": "./dist/index.esm.js", ? ? ? "require": "./dist/index.cjs.js", ? ? ? "browser": "./dist/index.umd.js", ? ? ? "types": "./dist/index.d.ts" ? ? } ? }

導(dǎo)出其他文件,例如除了導(dǎo)出默認路徑,導(dǎo)出源文件

?"exports":{ ? ? ... ? "./main" : "./src/main.js" },

其他項目中使用

import main from 'packageName'; // . 方式定義的 import main from 'packageName/main'; // ./main 方式定義的

6. type(非官方字段)

指定模塊系統(tǒng)的使用方式,"commonjs","module","umd","json"

示例:指定模塊系統(tǒng)為ES module模式,使用CommonJS文件時,需顯式的定義為 .cjs 文件擴展名,來明確指定這些文件為 CommonJS 模塊

"type":"module"

7. files

指定哪些包被推送到npm服務(wù)器中

示例:只推送index.js和dist包到npm服務(wù)器

??"files": [ ? ? "index.js", ? ? "dist" ? ],

可以在項目根目錄新建一個.npmignore文件,說明不需要提交到npm服務(wù)器的文件,類似.gitignore。寫在這個文件中的文件即便被寫在files屬性里也會被排除在外

8. bin

定義在全局安裝時可執(zhí)行的命令(使用情景較少)

9. man

Linux 中的幫助指令(使用情景較少)

10. directories

定義項目目錄結(jié)構(gòu)的字段(使用情景較少)

六、發(fā)布配置

1. private

防止私有包發(fā)布到npm服務(wù)器,要發(fā)布到npm上設(shè)為false

2. preferGlobal(非官方字段)

當設(shè)置 "preferGlobal" 字段為 true 時,它表示你的包更適合以全局方式安裝,而不是作為項目的依賴項進行本地安裝。

這個字段的設(shè)置是為了向用戶傳達關(guān)于你的包的最佳使用方式的建議。它并不會直接影響包的安裝方式或包管理器的行為。

3. publishConfig

在發(fā)布包時指定特定的配置

示例:指定包發(fā)布的注冊表 URL,指定所有用戶都可以訪問(私有的會收費)

?"publishConfig": { ? ? "registry": "https://registry.npmjs.org/", ? ? "access": "public" ? }

4. os

指定你的包適用的操作系統(tǒng)

示例:包只適用于darwin(macOS)和 linux

"os": ["darwin", "linux"]

示例:禁用win32

"os" ["!win32"] //禁用的操作系統(tǒng)

5. cpu

該配置和OS配置類似,用CPU可以更準確的限制用戶的安裝環(huán)境

6. license

指定軟件的開源協(xié)議:

ISC:在所有副本中保留版權(quán)聲明和許可證聲明,使用者就可以拿你的代碼做任何想做的事情,你也無需承擔(dān)任何責(zé)任

MIT:在所有副本或主要部分中保留版權(quán)聲明和許可證聲明,使用者就可以拿你的代碼做任何想做的事情,你也無需承擔(dān)任何責(zé)任

開源協(xié)議查詢地址:opensource.org/licenses/

七、第三方配置(非官方字段)

1. eslintConfig

eslint的配置,更推薦新建 .eslintrc 進行配置

使用參考:新建 .eslintrc

2. babel

babel的配置,更推薦新建 .babelrc 進行配置

3. unpkg

unpkg 是一個基于 CDN 的前端包托管服務(wù),用于在瀏覽器中直接引用和加載 npm 上發(fā)布的包。

無需下載,直接通過 <script> 標簽引用

js復(fù)制代碼<script src="https://unpkg.com/package-name@version"></script>

4. lint-staged

lint-staged是一個在Git暫存文件上運行l(wèi)inters的工具,通常配合gitHooks一起使用。

使用參考:配置 husky、lint-staged、@commitlint/cli

5. browserslist

告知支持哪些瀏覽器及版本,Autoprefixer常用到它

??"browserslist": [ ? ? "defaults", ? ? "not ie < 8", ? ? "last 2 versions", ? ? "> 1%", ? ? "iOS 7", ? ? "last 3 iOS versions" ? ]

6. sideEffects

指示包是否具有副作用,協(xié)助Webpack,Rollup等進行tree shaking

多數(shù)情況下可以直接設(shè)置為false,這樣打包工具就會自動刪除未被import的代碼

但是有些情況例外

  1. 有一些特定的模塊文件,它們執(zhí)行一些副作用操作,如注冊全局事件監(jiān)聽器、修改全局狀態(tài)等。

  2. 告訴構(gòu)建工具不要將樣式文件排除在無用代碼消除的優(yōu)化范圍之外

"sideEffects": ["./path/to/module.js", "*.css"]
有需要此資料的可以后臺私信【666】免費獲取哦?


前端程序員一定要掌握的package.json指南的評論 (共 條)

分享到微博請遵守國家法律
长泰县| 房产| 大城县| 钟山县| 海南省| 岳普湖县| 沙雅县| 报价| 子洲县| 永寿县| 阿合奇县| 永登县| 志丹县| 富顺县| 潢川县| 开原市| 灵武市| 工布江达县| 宜州市| 德清县| 内丘县| 松桃| 连平县| 阿拉善右旗| 岢岚县| 从江县| 临沂市| 阿坝| 巨鹿县| 安乡县| 天津市| 洛阳市| 河西区| 稷山县| 远安县| 鄯善县| 枞阳县| 舞钢市| 昌都县| 岱山县| 隆回县|