nodejs中包node_modules与package.json(三)

一node_modules文件详解:包实际上是一个存档文件,即一个目录直接打包为.zip或tar.gz格式的文件,安装后解压还原为目录。完全符合CommonJS规范的包目录应该包含如下这些文件

  1、package.json:包描述文件

  2、bin:用于存放可执行二进制文件的目录

  3、lib:用于存放JavaScript代码的目录

  4、doc:用于存放文档的目录

  5、test:用于存放单元测试用例的代码

二 package.json文件:定义了项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)NodeJS中的包

package.json文件可以手工编写,也可以使用npm init命令自动生成。[注意]npm init -y表示在安装过程中回答的都是yes,会自动生成如下所示的package.json文件。所有配置项中,只有项目名称(name)和项目版本(version)是必填的,其他都是选填的。

基本字段:package.json API

1、name——包名。规范定义它需要由小写的字母和数字组成,可以包含.、_和-,但不允许出现空格。包名必须是唯一的,以免对外公布时产生重名冲突的误解。除此之外,NPM还建议不要在包名中附带上node或js来重复标识它是JavaScript或Node模块

2、version——版本号。一个语义化的版本号,这在http://semver.org/上有详细定义,通常为major.minor.revision格式。该版本号十分重要,常常用于一些版本控制的场合

[注意]对于nodejs来说,版本号的小数位代表为这个版本的稳定性,偶数位为稳定版本(0.6.x、0.8.x……),奇数位为非稳定版本(0.7.x、0.9.x……)。一般地,开发时要使用最新的稳定版本

必须字段:CommonJS为package.json文件定义了包括name和version在内的10个必需的字段。但由于CommonJS包规范尚处于草案阶段,NPM在实践中做了一定的取舍

1、description——包简介。方便别人了解该模块作用,搜索的时候也有用

2、keywords——关键词数组,NPM中主要用来做分类搜索。一个好的关键词数组有利于用户快速找到该包

 [注意]livereload插件并没有设置keywords属性

3、maintainers——包维护者列表。每个维护者由name、email和web这3个属性组成

 [注意]livereload插件并没有设置maintainers中的web属性

4、contributors——贡献者列表。在开源社区中,为开源项目提供代码是经常出现的事情,如果名字能出现在知名项目的contributors列表中,是一件比较有荣誉感的事。列表中的第一个贡献应当是包的作者本人。它的格式与维护者列表相同

可选字段

scripts——脚本说明对象。它主要被包管理器用来安装、编译、测试和卸载包。scripts指定了运行脚本命令的npm命令行缩写,比如start指定了运行npm run start时,所要执行的命令。script脚本解读

其他字段:

  1. author——包作者
  2. bin——指定各个内部命令对应的可执行文件的位置。一些包作者希望包可以作为命令行工具使用。配置好bin字段后,通过npm install package_name -g命令可以将脚本添加到执行路径中,之后可以在命令行中直接执行。通过-g命令安装的模块包称为全局模式
  3. main——加载的入口文件。模块引入方法require()在引入包时,会优先检查这个字段,并将其作为包中其余模块的入口。如果不存在这个字段,require()方法会查找包目录下的index.js、index.node、index.json文件作为默认入口
  4. devDependencies——项目开发所需要的模块。一些模块只在开发时需要依赖。配置这个属性,可以提示包的后续开发者安装依赖包。类比于dependencies字段

三 npm 包发布:

  1. npm包发布与使用
  2. npm包的废弃与删除

Nodejs处理ES6模块 :

Node.js 要求 ES6 模块采用.mjs后缀文件名。也就是说,只要脚本文件里面使用import或者export命令,那么就必须采用.mjs后缀名。Node.js 遇到.mjs文件,就认为它是 ES6 模块, 

总结:.mjs文件总是以 ES6 模块加载,.cjs文件总是以 CommonJS 模块加载,.js文件的加载取决于package.json里面type字段的设置。

原文地址:https://www.cnblogs.com/terrymin/p/15639502.html