我们在上一篇《npm发布包教程(二):发布包》中演示了如何发布npm包,npm仓库有了我们自己的包,接下来就进入到安装并使用我们自己的包的环节。第一步:初始化测试工程mkdir test-my-pkg && cd test-my-pkg npm init -y第二步:npm官网找包官网输入我们已经发布的包yuyy-test-pkg@yuyy/babel页面会有安装命令,如下图所示:第三步:安装依次执行下面的命令 npm i yuyy-test-pkg npm i @yuyy/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.jsnode index.js执行结果:this message is from yuyy-test-pkg!this message is from @yuyy/babel!以上即为对我们自己的包引用的整个过程,值得注意的是:我们知道在Node环境中是通过CommonJS的风格管理模块的,所以在第四步引用模块的时候使用的是require()。关于require()的原理,阮一峰老师的《require()源码解读》中有详细介绍,不再赘述,仅将require()的内部原理摘抄整理如下,以伪代码的形式呈现:Node中执行: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发布包教程(三):npm包迭代》中演示对已经发布过的包如何进行迭代,包括内容的迭代和版本的迭代。