乐趣区

npm发布包教程(三):安装发布包

我们在上一篇《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.js
node 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 包迭代》中演示对已经发布过的包如何进行迭代,包括内容的迭代和版本的迭代。

退出移动版