npm发布包教程(三):安装和加载原理

该文详细介绍了如何发布和使用自建的npm包,包括初始化测试工程,从npm官网查找并安装包,以及在项目中引用和使用模块。文章还提及了require()的解析过程,并预告了包的迭代内容。

我们在上一篇《npm发布包教程(二):发布包》中演示了如何发布npm包,npm仓库有了我们自己的包,接下来就进入到安装并使用我们自己的包的环节。

第一步:初始化测试工程

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

第二步:npm官网找包

官网输入我们已经发布的包

  • djf-test-pkg
  • @duanjiefei/babel

页面会有安装命令,如下图所示:

在这里插入图片描述

第三步:安装

依次执行下面的命令

 npm i djf-test-pkg

 npm 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发布包教程(四):迭代》中演示对已经发布过的包如何进行迭代,包括内容的迭代和版本的迭代。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值