npm發佈包教程(三):安裝和加載原理

咱們在上一篇《npm發佈包教程(二):發佈包》中演示瞭如何發佈npm包,npm倉庫有了咱們本身的包,接下來就進入到安裝並使用咱們本身的包的環節。node

第一步:初始化測試工程

mkdir test-my-pkg && cd test-my-pkg
 
npm init -y
複製代碼

第二步:npm官網找包

官網輸入咱們已經發布的包npm

  • yuyy-test-pkg
  • @yuyy/babel

頁面會有安裝命令,以下圖所示:json

第三步:安裝

依次執行下面的命令bash

npm i yuyy-test-pkg

 npm i @yuyy/babel
複製代碼

此時的目錄結構:babel

test-my-pkg
├── node_modules
│   ├── @yuyy
│   │   └── babel
│   │       ├── README.md
│   │       ├── index.js
│   │       └── package.json
│   └── yuyy-test-pkg
│       ├── README.md
│       ├── index.js
│       └── package.json
├── package-lock.json
└── package.json

複製代碼

第四步:使用

(1) 建index.js
index.js:post

let printer = require('yuyy-test-pkg');
let otherPrinter = require('@yuyy/babel');

printer.printMsg();
otherPrinter.printMsg();
複製代碼

(2) 運行index.js測試

node index.js
複製代碼

執行結果:ui

this message is from yuyy-test-pkg!
this message is from @yuyy/babel!

複製代碼

加載原理

以上即爲對咱們本身的包引用的整個過程,值得注意的是: 咱們知道在Node環境中是經過CommonJS的風格管理模塊的,因此在第四步引用模塊的時候使用的是require()。關於require()的原理,阮一峯老師的《require()源碼解讀》中有詳細介紹,再也不贅述,僅將require()的內部原理摘抄整理以下,以僞代碼的形式呈現:this

Node中執行:spa

require(X)
複製代碼

解析過程:

if(X 是Node內部模塊){
    return X
}else if(X 帶路徑,以 ‘/‘、‘./‘、’../'開頭){ resolveModule(X) }else if(X 不帶路徑){ /當前工程/node_modules 執行 resolveModule(X) ./當前工程 node_modules 執行 resolveModule(X) ../當前工程 node_modules 執行 resolveModule(X) . . . }else { return 'not found' } function resolveModule(X){ absolutePath = X的絕對路徑(根據X所在的父模塊可知) if(X 是文件){ return absolutePath/X || absolutePath/X.js || absolutePath/X.json || absolutePath/X.node; }else if(X 是目錄){ return absolutePath/X/package.json(main字段) || absolutePath/X/index.js || absolutePath/X/index.json || absolutePath/X/index.node } } 複製代碼

咱們將在下一篇文章《npm發佈包教程(四):迭代》中演示對已經發布過的包如何進行迭代,包括內容的迭代和版本的迭代。

相關文章:

1.《npm發佈包教程(一):從npm提及》

2.《npm發佈包教程(二):發佈包》

3.《npm發佈包教程(三):安裝和加載原理》

4.《npm發佈包教程(四):迭代》

5.《npm發佈包教程(五):廢棄/刪除》

相關文章
相關標籤/搜索