咱们在上一篇《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发布包教程(五):废弃/删除》