咱們在上一篇《npm發佈包教程(二):發佈包》中演示瞭如何發佈npm包,npm倉庫有了咱們本身的包,接下來就進入到安裝並使用咱們本身的包的環節。node
mkdir test-my-pkg && cd test-my-pkg npm init -y
官網輸入咱們已經發布的包npm
頁面會有安裝命令,以下圖所示:json
依次執行下面的命令segmentfault
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:測試
let printer = require('yuyy-test-pkg'); let otherPrinter = require('@yuyy/babel'); printer.printMsg(); otherPrinter.printMsg();
(2) 運行index.jsui
node index.js
執行結果:this
this message is from yuyy-test-pkg! this message is from @yuyy/babel!
以上即爲對咱們本身的包引用的整個過程,值得注意的是:
咱們知道在Node環境中是經過CommonJS的風格管理模塊的,因此在第四步引用模塊的時候使用的是require()。關於require()的原理,阮一峯老師的《require()源碼解讀》中有詳細介紹,再也不贅述,僅將require()的內部原理摘抄整理以下,以僞代碼的形式呈現:spa
Node中執行:3d
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發佈包教程(五):廢棄/刪除》