成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

這還是我最熟悉的package.json嗎?

開發 前端
npm 的配置還是挺多的,具體可以參考package.json官方文檔[2]。通讀了文檔之后,我略過了一些基礎的配置項,總結了一些我認為比較有用的配置項。

[[395264]]

前言

在上一篇npm init @vitejs/app的背后,僅是npm CLI的冰山一角[1]中,有提到我復習npm主要是從兩個大方向來入手,所以這篇繼續來講講package.json這部分知識,經過這輪復習,也發現了自己的很多不足,之前把常用的命令和配置玩熟了,卻沒關心npm已經有了更多新的玩法,而這些玩法卻實實在在地在解決別人的問題。

npm 的配置還是挺多的,具體可以參考package.json官方文檔[2]。通讀了文檔之后,我略過了一些基礎的配置項,總結了一些我認為比較有用的配置項。

常用配置項

files

files定義了哪些文件應該被包括在 npm install 后的 node_modules中。

當然,有些文件是自動暴露出來的,不管你是不是配置了files,比如:

  • package.json
  • README / CHANGELOG / LICENSE
  • ...

很多庫都定義了 files,避免一些不必要的文件暴露到 node_modules 中。

vite 中是這樣配置的:

  1.   "files": [ "bin""dist""client.d.ts" ] 

我之前就不知道這個配置,導致我發布的一個 npm 組件 vue-awesome-progress[3] 就暴露了源碼部分,雖然這也沒啥影響,本來就是開源的。但是這也增加了別人的資源下載量,也是一種浪費。所以,專業點的搞法還是加上files配置吧。

bin

bin 列出了可執行文件,表示你這個包要對外提供哪些腳本。

在這個包被 install 安裝時,如果是全局安裝 -g,bin 列出的可執行文件會被添加到 PATH 變量(全局可執行);如果是局部安裝,則會進入到 node_modules/.bin/ 目錄下。

bin 在一些 CLI 工具中用得很頻繁,比如 Vue CLI。

在開發 npm 包時,要求發布的可執行腳本要以#!/usr/bin/env node開頭,這是為什么呢?

我查了一下,原來是為了用于指明該腳本文件要使用 node 來執行。

main, browser, module

這三個配置對我們的影響還是挺大的。

main字段決定了別人require('xxx')時,引用的是哪個模塊對象。在不設置main字段時,默認值是index.js。

如果你開發的包是用于瀏覽器端的,那么用browser指定入口文件是最佳的選擇。

module則代表你開發的包支持ESM,并指定了一個ESM入口。

具體這三個字段怎么用,還是挺有學問的,這里推薦一篇文章package.json中你還不清楚的browser,module,main 字段優先級[4],講得挺細。

長圖警告!

scripts

scripts也基本上每天都用了,但是它的鉤子腳本你用過嗎?如果沒有用過,可以試試,在組織腳本流程時非常好用!

  • pre:在一個script執行前執行,比如prebuild,可以在打包前做一些準備工作。
  • post:在一個script執行后執行,比如postbuild,可以在打包后做一些收尾工作。

config

通過config配置的參數xxx,可以在腳本中通過npm_package_config_xxx 的形式引用,比如port。

  1.   "config": { 
  2.     "port""8080" 
  3.   } 

依賴相關

dependencies

dependencies可以理解為生產依賴,通過npm install --save安裝的依賴包都會進入到dependencies中。

devDependencies

devDependencies可以理解為開發環境依賴,通常是一些工具類的包,比如 webpack, babel等。通過npm install --save-dev安裝的依賴包都會進入到devDependencies中。

但是,在結合一些構建工具使用時,我們往往會有困惑。比如我安裝了一個包到devDependencies中,但是不小心在項目中引用了它,最后也被 webpack 打包到構建結果中了。這是怎么回事呢?

建議結合上篇文章npm install這一節[5]一起看。

peerDependencies

我是package-a,你裝我,你就必須裝我的peerDependencies。

讓“調包俠”將package-a的依賴提升到自己的node_modules中,這樣可以在“調包俠”和package-a都需要同一個依賴(比如vue)時,避免重復安裝。這常見于開發組件或者庫。

注意,一個 npm 包的開發者如果聲明了peerDependencies,開發環境下在該包目錄npm install也不會在node_modules中安裝這些依賴,所以往往還需要借助devDependencies。

舉個例子,我開發一個組件,不想發布到 npm 時包含了 vue 的代碼,這就需要外部提供 vue ,所以我把 vue 定義在 peerDependencies 也無可厚非。但是,在開發組件時,一般還需要本地開發環境跑一個 demo 試試效果,這時候是依賴 vue 的,所以還需要在 devDependencies 中安裝 vue 。我看了下 vue-router 就是這么做的,所以我在開發自己的組件時也學會了這招。

bundledDependencies

bundledDependencies跟上面的依賴都不太一樣,配置上不是鍵值對的形式,而是一個數組。

  1.   "bundledDependencies": [ 
  2.     "vue"
  3.     "vue-router" 
  4.   ] 

在運行npm pack時,會將對應依賴打包到tgz文件中。用得不多,不知道具體的細節,主要還是直接用npm install安裝 tgz 包的場景比較少,有個概念就行。

optionalDependencies

optionalDependencies用于配置可選的依賴,即使配了這個,代碼里也要做好判斷(保護),否則運行報錯就不好玩了。

  1. try { 
  2.   var foo = require('foo'
  3.   var fooVersion = require('foo/package.json').version 
  4. } catch (er) { 
  5.   foo = null 

題外話

仔細讀過package.json文檔后,整體上還是解決了我的不少困惑,對我開發 npm 組件也提供了不少幫助。如果您想了解更多細節和實戰,不妨打開我這個項目vue-awesome-progress[3]看看,希望對您有所幫助!

 

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

2024-02-02 08:50:20

Node.js元數據自動化

2022-09-30 15:35:47

json 文件前端開源

2021-09-26 06:43:08

快閃前端文件

2022-06-10 09:00:53

前端項目個JSON

2023-09-18 10:11:25

前端工具

2021-11-14 22:27:33

iOS蘋果系統

2018-07-27 09:17:43

Windows操作系統功能

2021-03-26 21:34:30

Javasript項目工具

2020-01-13 16:57:02

iPhone 12蘋果手機

2024-01-22 11:06:47

系統后端開發

2024-03-26 00:54:42

預測模型數據

2024-02-26 07:51:08

業務系統迭代

2009-06-24 16:27:09

路由器定義集成服務路由

2011-04-29 12:54:05

筆記本屏幕

2023-11-02 08:27:29

2022-10-20 13:05:53

patches文件生成

2020-06-30 20:26:10

微信功能移動應用

2023-10-08 07:45:34

Npm解析服務前端

2020-11-03 11:22:35

數據泄露漏洞信息安全

2018-06-29 15:29:13

Tensorflow代碼谷歌
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 男人的天堂一级片 | 国产欧美精品区一区二区三区 | 久久精品视频亚洲 | 欧美精品免费观看二区 | 成人精品久久 | 国产精品精品久久久久久 | 日本不卡一区 | 日韩成人av在线播放 | 精品久久久久久 | 酒色成人网 | 特级生活片 | 中文字幕伊人 | 成人性视频在线 | 欧美激情综合 | 亚洲国产一区二区三区 | www国产成人免费观看视频,深夜成人网 | 男人天堂手机在线视频 | 午夜一区二区三区在线观看 | 亚洲国产精品一区二区www | 毛片一级黄色 | 午夜精品久久久 | 罗宾被扒开腿做同人网站 | 久久这里只有精品首页 | 99视频免费 | 亚洲精品大片 | 99久久视频 | 欧美久久不卡 | 国产精品日韩在线观看一区二区 | 人人干人人干人人干 | 成人精品视频在线 | 亚洲成人免费在线观看 | 国产精品久久午夜夜伦鲁鲁 | 伊人久操| 超碰在线播 | 一区二区三区免费 | 亚洲欧美日韩久久久 | 久久成人免费视频 | 国产亚洲一区二区三区在线观看 | 天堂一区 | 中文字幕亚洲一区二区三区 | 成年人视频在线免费观看 |