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

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

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

npm介紹

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

npm(全稱Node Package Manager)是Node.js標準的軟件包管理器。

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

如果一個項目中存在package.json文件,便可以執(zhí)行npm install命令自動安裝和維護當前項目所需的所有模塊并生成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為項目名,version為項目版本,license為項目聲明的許可證,devDependencies為開發(fā)環(huán)境使用的依賴,dependencies為生產(chǎn)環(huán)境使用的依賴。

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

解析算法

package-lock.json

package-lock.json是在npm install時自動生成的文件,用以記錄當前狀態(tài)下實際安裝的各個npm package的具體來源和版本號,通過該文件可以準確定位到npm項目的依賴及版本。所以優(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字段為項目名稱,version字段為項目版本。dependencies字段中包含項目使用的所有直接和間接依賴,而且記錄了組件間的依賴關(guān)系。

例如:

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

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

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

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

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

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

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

注:

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

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

實線代表直接依賴,虛線代表間接依賴。

package.json

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

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

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

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

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

例如:

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

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

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

代表項目直接依賴版本約束為^1.1.0組件c。

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

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

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

例如組件a的詳細信息結(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字段為組件各個版本對應(yīng)的詳細信息,其中dependencies字段為組件的依賴信息。

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

按照這種方式層級解析便可獲取整個項目的依賴信息。

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

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

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

GitHub:
github.com/XmirrorSecu…

Gitee:
gitee.com/XmirrorSecu…。

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

相關(guān)文章

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

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

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

    詳解從Node.js的child_process模塊來學習父子進程之間的通信

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

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

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

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

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

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

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

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

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

    從零開始學習Node.js系列教程之SQLite3和MongoDB用法分析

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

    NodeJS同步和異步實例代碼講述異步編程

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

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

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

    sails框架的學習指南

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

最新評論

尼木县| 泸定县| 科尔| 瓦房店市| 建昌县| 盐津县| 瑞昌市| 大荔县| 新晃| 阳城县| 聊城市| 华亭县| 章丘市| 长顺县| 合阳县| 惠来县| 邵东县| 河南省| 丹寨县| 宜章县| 洛川县| 林州市| 抚远县| 张家川| 梁河县| 都昌县| 石嘴山市| 迭部县| 郸城县| 临江市| 泽库县| 即墨市| 鄂温| 新野县| 海伦市| 西安市| 高唐县| 永靖县| 龙州县| 壶关县| 远安县|