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

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

第一步:初始化測試工程

mkdir test-my-pkg && cd test-my-pkg
 
npm init -y

第二步:npm官網找包

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

  • yuyy-test-pkg
  • @yuyy/babel

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

clipboard.png

第三步:安裝

依次執行下面的命令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發佈包教程(五):廢棄/刪除》

相關文章
相關標籤/搜索