我们在上一篇《npm发布包教程(二):发布包》中演示了如何发布npm包,npm仓库有了我们自己的包,接下来就进入到安装并使用我们自己的包的环节。
mkdir test-my-pkg && cd test-my-pkgnpm init -y
官网输入我们已经发布的包
页面会有安装命令,如下图所示:
依次执行下面的命令
npm i djf-test-pkgnpm i @duanjiefei/babel
此时的目录结构:
test-my-pkg
├── node_modules
│ ├── @duanjiefei
│ │ └── babel
│ │ ├── README.md
│ │ ├── index.js
│ │ └── package.json
│ └── djf-test-pkg
│ ├── README.md
│ ├── index.js
│ └── package.json
├── package-lock.json
└── package.json
(1) 建index.js
index.js:
let printer = require('djf-test-pkg');
let otherPrinter = require('@duanjiefei/babel');printer.printMsg();
otherPrinter.printMsg();
(2) 运行index.js
node index.js
执行结果:
this message is from djf-test-pkg!
this message is from @duanjiefei/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发布包教程(四):迭代》中演示对已经发布过的包如何进行迭代,包括内容的迭代和版本的迭代。
上一篇:样式声明——背景属性
下一篇:RPA学习-数组处理