(3)package.json 中必须包含 name , version , main 这三个属性 , 分别代表包的名字、版本号、包的入口 。
注意:以上 3 点要求是一个规范的包结构必须遵守的格式 , 关于更多的约束 , 可以参考如下网址:https://yarnpkg.com/zh-Hans/docs/package-json
3.7 开发属于自己的包
1、初始化包的基本结构
(1)新建一个itheima-tools文件夹 , 作为包的根目录
(2)在itheima-tools文件夹中 , 新建如下三个文件:
- package.json (包管理配置文件)
index.js (包的入口文件)
README.md (包的说明文档)
文章插图
注:name—用于告知应用程序或软件包的名称;version—表明了当前的版本;main—设置了应用程序的入口点;description是应用程序/软件包的简短描述;keywords—此属性包含与软件包功能相关的关键字数组(有助于浏览node官网找到该软件包);license—指定软件包的许可证 。3、编写包的说明文档
包根目录中的 README.md 文件 , 是包的使用说明文档 。 通过它 , 我们可以事先把包的使用说明 , 以 markdown 的格式写出来 , 方便用户参考 。
README 文件中具体写什么内容 , 没有强制性的要求;只要能够清晰地把包的作用、用法、注意事项等描述清楚即可 。
3.8 发布包
1、注册 npm 账号
(1)访问 www.npmjs.com/ 网站 , 点击 sign up 按钮 , 进入注册用户界面
(2)填写账号相关的信息:Full Name、Public Email、Username、Password
(3)点击 Create an Account 按钮 , 注册账号
(4)登录邮箱 , 点击验证链接 , 进行账号的验证
2、登录 npm 账号
npm 账号注册完成后 , 可以在终端中执行 npm login 命令 , 依次输入用户名、密码(密码是隐藏的 , 看不到 , 只管输入正确回车即可)、邮箱、发送到邮箱的OTP code后 , 即可登录成功 。
注意:在运行 npm login 命令之前 , 必须先把下包的服务器地址切换为 npm 的官方服务器 。 (如果之前是用的taobao服务器一定要切换为npm官方服务器)否则会导致发布包失败!
文章插图
3、把包发布到 npm 上
将终端切换到包的根目录之后 , 运行 npm publish 命令 , 即可将包发布到 npm 上(注意:包名不能雷同 , 可以去官网查是否有重名的包) 。
4、删除已发布的包
运行 npm unpublish 包名 --force 命令 , 即可从 npm 删除已发布的包 。
注意:
(1)npm unpublish 命令只能删除 72 小时以内发布的包
(2)npm unpublish 删除的包 , 在 24 小时内不允许重复发布
(3)发布包的时候要慎重 , 尽量不要往 npm 上发布没有意义的包!
四、模块的加载机制4.1 优先从缓存中加载
模块在第一次加载后会被缓存 。 这也意味着多次调用 require() 不会导致模块的代码被执行多次 。
文章插图
注意:不论是内置模块、用户自定义模块、还是第三方模块 , 它们都会优先从缓存中加载 , 从而提高模块的加载效率 。
4.2 内置模块的加载机制
内置模块是由 Node.js 官方提供的模块 , 内置模块的加载优先级最高 。
例如:require('fs') 始终返回内置的 fs 模块 , 即使在 node_modules 目录下有名字相同的包也叫做 fs 。
4.3 自定义模块的加载机制
使用 require() 加载自定义模块时 , 必须指定以 ./ 或 ../ 开头的路径标识符 。 在加载自定义模块时 , 如果没有指定 ./ 或 ../ 这样的路径标识符 , 则 node 会把它当作内置模块或第三方模块进行加载 。
同时 , 在使用 require() 导入自定义模块时 , 如果省略了文件的扩展名 , 则 Node.js 会按顺序分别尝试加载以下的文件:
(1)按照确切的文件名进行加载
(2)补全 .js 扩展名进行加载
(3)补全 .json 扩展名进行加载
(4)补全 .node 扩展名进行加载
(5)加载失败 , 终端报错
4.4 第三方模块的加载机制
如果传递给 require() 的模块标识符不是一个内置模块 , 也没有以 ‘./’ 或 ‘../’ 开头 , 则 Node.js 会从当前模块的父目录开始 , 尝试从 /node_modules 文件夹中加载第三方模块 。
如果没有找到对应的第三方模块 , 则移动到再上一层父目录中 , 进行加载 , 直到文件系统的根目录 。
推荐阅读
- 深入浅析Nodejs中的net模块
- 聊聊职场上的道德与法律 什么是职业道德
- 十二星座2019年12月5日运势:细心观察,深入思考
- 来来来,管家和你聊聊宝宝音乐敏感期那些事儿
- 深入剖析市场调研方法及步骤 如何做市场调查与分析
- 2020年双子座运势:虽然心累,但处理好深入关系,会得到馈赠
- 今天来聊聊“短文案和长文案的区别”
- 了解Node.js Nestjs框架的模块机制,聊聊实现原理
- 深入认识用户增长产品经理 用户增长产品经理
- 女性为何经期延长 原因需要深入追究