最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenSCA技術(shù)原理npm依賴示例解析

 更新時(shí)間:2023年02月17日 11:35:51   作者:OpenSCA社區(qū)  
這篇文章主要為大家介紹了OpenSCA技術(shù)原理npm依賴示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

npm介紹

本文主要介紹基于npm包管理器的組件成分解析原理。

npm(全稱Node Package Manager)是Node.js標(biāo)準(zhǔn)的軟件包管理器。

npm的依賴管理文件是package.json,開發(fā)者可以在package.json中指定每個(gè)依賴項(xiàng)的版本范圍。

如果一個(gè)項(xiàng)目中存在package.json文件,便可以執(zhí)行npm install命令自動(dòng)安裝和維護(hù)當(dāng)前項(xiàng)目所需的所有模塊并生成package-lock.json文件。

package.json完整文件結(jié)構(gòu)如下:

{
  "name": "screeps",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "push": "rollup -cw --environment DEST:main",
    "build": "rollup -cw --environment DEST:local",
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@rollup/plugin-commonjs": "^21.0.1",
    "@rollup/plugin-node-resolve": "^13.1.1",
    "@types/lodash": "^3.10.1",
    "@types/screeps": "^3.2.4",
    "rollup": "^2.61.1",
    "rollup-plugin-clear": "^2.0.7",
    "rollup-plugin-copy": "^3.4.0",
    "rollup-plugin-screeps": "^1.0.1",
    "rollup-plugin-typescript2": "^0.31.1",
    "typescript": "^4.5.4"
  },
  "dependencies": {
    "source-map": "^0.6.1"
  }
}

其中name為項(xiàng)目名,version為項(xiàng)目版本,license為項(xiàng)目聲明的許可證,devDependencies為開發(fā)環(huán)境使用的依賴,dependencies為生產(chǎn)環(huán)境使用的依賴。

依賴寫法為"name":"version",版本可以指定準(zhǔn)確版本或一個(gè)范圍,范圍需遵循semver語義化版本規(guī)范

解析算法

package-lock.json

package-lock.json是在npm install時(shí)自動(dòng)生成的文件,用以記錄當(dāng)前狀態(tài)下實(shí)際安裝的各個(gè)npm package的具體來源和版本號,通過該文件可以準(zhǔn)確定位到npm項(xiàng)目的依賴及版本。所以優(yōu)先解析package-lock.json文件。

package-lock.json文件結(jié)構(gòu)如下:

{
  "name": "foo",
  "version": "1.0.0",
  "dependencies": {
    "b": {
      "version": "1.2.1"
    },
    "a": {
      "version": "2.1.5",
      "requires": {
        "b": "^1.1.9"
      }
    },
    "c": {
      "version": "1.3.1",
      "requires": {
        "b": "^1.2.0"
      }
    }
  }
}

其中name字段為項(xiàng)目名稱,version字段為項(xiàng)目版本。dependencies字段中包含項(xiàng)目使用的所有直接和間接依賴,而且記錄了組件間的依賴關(guān)系。

例如:

"b": {
  "version": "1.2.1"
},

代表組件b的版本號為1.2.1。

"a": {
  "version": "2.1.5",
  "requires": {
    "b": "^1.1.9"
  }
},

代表項(xiàng)目依賴2.1.5版本的組件a,該組件依賴版本約束為^1.1.9的組件b。

同理可知項(xiàng)目依賴1.3.1版本的組件c,該組件依賴版本約束為^1.2.0的組件b。

<package-lock.json文件結(jié)構(gòu)> 可看出組件a和組件c都沒有被其他組件所依賴,所以可知這兩個(gè)組件是項(xiàng)目的直接依賴。

僅通過package-lock.json無法確定組件b是否是直接依賴,可以結(jié)合package.json文件進(jìn)一步確定,沒有package.json時(shí),將b當(dāng)作間接依賴處理。若一個(gè)組件同時(shí)為直接和間接依賴,按直接依賴處理。

注:

  • ^1.1.9代表版本號需要>=1.1.9且<2.0.0;
  • ^1.2.0代表版本號需要>=1.2.0且<2.0.0;
  • 更多約束格式請參閱semver官網(wǎng)

由此可以構(gòu)建出當(dāng)前項(xiàng)目的依賴結(jié)構(gòu):

實(shí)線代表直接依賴,虛線代表間接依賴。

package.json

package.json為開發(fā)者編寫管理的依賴管理文件,在未找到package-lock.json文件時(shí)將解析該文件。

package.json僅包含直接依賴,在項(xiàng)目構(gòu)建時(shí)會(huì)從npm倉庫下載需要的間接依賴并構(gòu)建為package-lock.json文件,因此可以模擬npm構(gòu)建流程來獲取項(xiàng)目引用的組件依賴。

package.json文件結(jié)構(gòu)如下:

{
  "name": "foo",
  "version": "1.0.0",
  "devDependencies": {
    "a": "^2.0.0"
  },
  "dependencies": {
    "c": "^1.1.0"
  }
}

dependencies為項(xiàng)目實(shí)際使用的直接依賴,devDependencies為項(xiàng)目開發(fā)時(shí)使用的直接依賴。

例如:

"devDependencies": {
  "a": "^2.0.0"
}

代表項(xiàng)目開發(fā)過程中依賴版本約束為^2.0.0的組件a。

"dependencies": {
  "c": "^1.1.0"
}

代表項(xiàng)目直接依賴版本約束為^1.1.0組件c。

分析到這里我們可以總結(jié)出如下圖依賴關(guān)系:

通過該依賴關(guān)系可以看出項(xiàng)目組件的直接依賴及組件的版本范圍,但無法得知組件依賴的具體版本。

在沒有package-lock.json文件的情況下,為了進(jìn)一步獲取依賴的準(zhǔn)確版本及間接依賴,需要從npm倉庫下載對應(yīng)組件的詳細(xì)信息。

例如組件a的詳細(xì)信息結(jié)構(gòu)為:

{
  "time": {
    "2.1.5": "2011-02-16T22:31:02.088Z",
    "3.1.1": "2011-04-10T12:23:22.088Z"
  },
  "versions": {
    "2.1.5": {
      "dependencies": {
        "b": "^1.1.9"
      }
    },
    "3.1.1": {
      "dependencies": {
        "b": "^2.2.0"
      }
    }
  }
}

其中time字段為組件所有版本及發(fā)布日期,根據(jù)約束從這里獲取約束范圍內(nèi)的最大版本。

versions字段為組件各個(gè)版本對應(yīng)的詳細(xì)信息,其中dependencies字段為組件的依賴信息。

對于本例來說,組件a的約束為^2.0.0,要求版本號>=2.0.0且<3.0.0,所以選擇2.1.5版本。因此組件依賴結(jié)構(gòu)就變成了:

按照這種方式層級解析便可獲取整個(gè)項(xiàng)目的依賴信息。

感謝每一位開源社區(qū)成員對OpenSCA的支持和貢獻(xiàn)。

OpenSCA已在GitHub和Gitee開源,歡迎Star和PR,成為我們的開源貢獻(xiàn)者,也可提交問題或建議至Issues。我們會(huì)參考大家的建議不斷完善OpenSCA開源項(xiàng)目,敬請期待更多功能的支持。

OpenSCA官網(wǎng):
opensca.xmirror.cn/

GitHub:
github.com/XmirrorSecu…

Gitee:
gitee.com/XmirrorSecu…

以上就是OpenSCA技術(shù)原理npm依賴示例解析的詳細(xì)內(nèi)容,更多關(guān)于OpenSCA技術(shù)npm依賴的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解析NodeJs的調(diào)試方法

    解析NodeJs的調(diào)試方法

    本文主要介紹了NodeJs調(diào)試的步驟,以及實(shí)例方法,具有一定的參考作用,需要的朋友可以看下
    2016-12-12
  • 詳解從Node.js的child_process模塊來學(xué)習(xí)父子進(jìn)程之間的通信

    詳解從Node.js的child_process模塊來學(xué)習(xí)父子進(jìn)程之間的通信

    這篇文章主要介紹了從Node.js的child_process模塊來學(xué)習(xí)父子進(jìn)程之間的通信,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • node.js中的fs.read方法使用說明

    node.js中的fs.read方法使用說明

    這篇文章主要介紹了node.js中的fs.read方法使用說明,本文介紹了fs.read方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Node.js中的異步生成器與異步迭代詳解

    Node.js中的異步生成器與異步迭代詳解

    這篇文章主要給大家介紹了關(guān)于Node.js中異步生成器與異步迭代的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • node.js 如何監(jiān)視文件變化

    node.js 如何監(jiān)視文件變化

    這篇文章主要介紹了node.js 如何監(jiān)視文件變化,幫助大家更好的理解和學(xué)習(xí)node.js,感興趣的朋友可以了解下
    2020-09-09
  • Node.js的Web模板引擎ejs的入門使用教程

    Node.js的Web模板引擎ejs的入門使用教程

    ejs是Node世界的開源模板引擎中比較有人氣的一個(gè),而且并不只是在Express框架中才可以使用,今天為大家?guī)鞱ode.js的Web模板引擎ejs的入門學(xué)習(xí)教程,其中側(cè)重于ejs的layout頁面布局放面
    2016-06-06
  • 從零開始學(xué)習(xí)Node.js系列教程之SQLite3和MongoDB用法分析

    從零開始學(xué)習(xí)Node.js系列教程之SQLite3和MongoDB用法分析

    這篇文章主要介紹了Node.js SQLite3和MongoDB用法,結(jié)合實(shí)例形式分析了SQLite3和MongoDB數(shù)據(jù)庫的初始化、連接、查詢等操作的實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-04-04
  • NodeJS同步和異步實(shí)例代碼講述異步編程

    NodeJS同步和異步實(shí)例代碼講述異步編程

    異步編程是NodeJS最大的特點(diǎn),異步編程依托于回調(diào)來實(shí)現(xiàn),有很多特有的代碼設(shè)計(jì)模式,為了實(shí)現(xiàn)同樣的功能,使用同步方式和異步方式編寫的代碼會(huì)有很大差異,本文通過幾個(gè)同步和異步實(shí)例代碼講述異步編程的使用方法
    2024-01-01
  • node+multer實(shí)現(xiàn)圖片上傳的示例代碼

    node+multer實(shí)現(xiàn)圖片上傳的示例代碼

    這篇文章主要介紹了node+multer實(shí)現(xiàn)圖片上傳的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • sails框架的學(xué)習(xí)指南

    sails框架的學(xué)習(xí)指南

    本文從最基礎(chǔ)的sails框架知識開始講起,通過示例給我們展示了sails框架的各個(gè)方面,非常的不錯(cuò),推薦給小伙伴們
    2014-12-12

最新評論

巴南区| 新安县| 嘉禾县| 乌兰浩特市| 塔城市| 济宁市| 昂仁县| 凤庆县| 新巴尔虎右旗| 察雅县| 隆尧县| 漳州市| 巴里| 虎林市| 含山县| 普兰县| 陵川县| 福鼎市| 延川县| 六枝特区| 南陵县| 延津县| 神农架林区| 丰镇市| 甘德县| 临城县| 夏邑县| 宁乡县| 洪江市| 汤原县| 集贤县| 光山县| 五华县| 遂平县| 漳州市| 苏尼特右旗| 陈巴尔虎旗| 藁城市| 丰镇市| 纳雍县| 定边县|