咱們在上一篇《npm發佈包教程(二):發佈包》中演示瞭如何發佈npm包,npm倉庫有了咱們本身的包,接下來就進入到安裝並使用咱們本身的包的環節。node
mkdir test-my-pkg && cd test-my-pkg
npm init -y
複製代碼
官網輸入咱們已經發布的包npm
頁面會有安裝命令,以下圖所示: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發佈包教程(四):迭代》中演示對已經發布過的包如何進行迭代,包括內容的迭代和版本的迭代。
相關文章: