💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 包 * 包(Package)是 Node.js 最重要的支柱。 * Node.js 根据 CommonJS 规范实现了包机制,但不完全遵循。 * 包是在模块基础上更深一步的抽象,Node.js 的包类似于 C/C++ 的函数库或者 Java/.Net 的类库。它将某个独立的功能封装起来,用于发布、更新、依赖管理和版本控制。 * 开发中使用 npm 来解决包的发布和获取需求。Node.js package manager # 包规范 ## CommonJS 包规范和 Node.js 包实现 CommonJS 规范的包应该具备以下特征: * package.json 必须在包的顶层目录下; * 二进制文件应该在 bin 目录下; * JavaScript 代码应该在 lib 目录下; * 文档应该在 doc 目录下; * 单元测试应该在 test 目录下。 Node.js 对包的要求并没有这么严格,要求如下: * 包是一个目录,其中包含一个 JSON 格式的包说明文件 package.json; * 但为了提高兼容性,建议在制作包的时候,严格遵守 CommonJS 规范。 Node.js 在调用某个包时,会首先检查包中 package.json 文件的 main 字段,将其作为包的接口模块,如果 package.json 或 main 字段不存在,会尝试寻找 index.js 或 index.node 作为包的接口。 ## package.json package.json 是 CommonJS 规定的用来描述包的文件,完全符合规范的 package.json 文件应该含有以下字段。 * name :包的名称,必须是唯一的,由小写英文字母、数字和下划线组成,不能包含空格。 * description :包的简要说明。 * version :符合语义化版本识别规范的版本字符串。 * keywords :关键字数组,通常用于搜索。 * maintainers :维护者数组,每个元素要包含 name、email(可选)、web (可选)字段。 * contributors :贡献者数组,格式与 maintainers 相同。包的作者应该是贡献者数组的第一个元素。 * bugs :提交 bug 的地址,可以是网址或者电子邮件地址。 * licenses :许可证数组,每个元素要包含 type(许可证的名称)和 url(链接到许可证文本的地址)字段。 * repositories : 仓库托管地址数组,每个元素要包含 type(仓库的类型,如 git ) * url(仓库的地址)和 path(相对于仓库的路径,可选)字段。 * dependencies :生成环境包的依赖,一个关联数组,由包名称和版本号组成。 * devDependencies:开发环境包的依赖,一个关联数组,由包的名称和版本号组成。 # npm npm 是 Node.js 官方提供的包管理工具,它已经成了 Node.js 包的标准发布平台。用于 Node.js 包的发布、传播、依赖控制。npm 提供了命令行工具,使你可以方便地下载、安装、升级、删除包,也可以让你作为开发者发布并维护包。常用的引用场景: * 开发者从 npm 服务器下载别人编写的第三方包到本地使用。 * 开发者从 npm 服务器下载并安装别人编写的命令行程序到本地使用。 * 开发者将自己编写的包或命令行程序上传到 npm 服务器供别人使用。 在安装 Node.js 的时候已一并安装了,不需要额外安装。 ## 使用 nmp 被墙问题 使用 npm 安装包时候,其会到 [npm 包网站](https://www.npmjs.com/)下载依赖,但有这个网站是国外,在下载依赖的时候会很慢或是下载失败。 * 配置淘宝镜像,淘宝 NPM 镜像,与官方 npm 的同步频率目前为 10 分钟一次。[官方网站](http://npm.taobao.org/) ~~~ npm config set registry=https://registry.npm.taobao.org ~~~ * 安装 cnpm,安装完之后使用 cnpm 来操作。 ~~~ npm install -g cnpm –registry=https://registry.npm.taobao.org ~~~ ## 包的相关命令 * 安装包命令:`npm install [-g] 包名[@版本号] [-D]` * 带有 -g,表示全局安装,安装到 Node.js 根据目录 node\_modules 文件夹中,用于命令行下使用,不带有 -g 表示本地安装,安装到当前项目中 node\_modules 文件夹中,并修改 package.json 中包依赖配置,用于当前项目用开发使用。 * 没有带版本号的话安装的是最新版本,带了版本号安装指定版本。 * 不带 -D 表示生产环境的包依赖,带了 -D 表示开发环境的包依赖。 * 查看包命令:`npm list [-g] [包名]` * 带有 -g,表示全局查看,不带有 -g 表示本地查看。 * 带有包名表示查看特定包,不带有包名表示查看所有包。 * 更新包命令:`npm update [-g] [包名][@版本号]` * 带有 -g,表示全局更新,不带有 -g 表示本地更新。 * 带有包名表示更新特定包,不带有包名表示更新所有包。 * 没有带版本号的话更新到最新版本,带了版本好更新到指定的版本。 * 卸载包命令:`npm uninstall [-g] 包名` * 带有 -g,表示全局卸载,不带有 -g 表示本地卸载。 ## 全局包操作 ~~~ npm install -g es-checker   // 安装检测 Node.js 对 ES6 工具 es-checker                 // 在命令行输入这命令就可以查看 ​ npm list -g es-checker     // 查看 es-checker 包 npm list -g                 // 查看所有的包 npm update -g es-checker   // 更新 es-checker 包 npm uninstall -g es-checker // 卸载 es-checker 包 ~~~ ## 本地包操作 ### 创建包 * 首先建一个文件夹,例如 somepackage。 * 在这目录里打开 Windows 命令行(终端) * 输入命令 `npm init` 即可,根据提示输入,作为 package.json 文件的内容。 * 若想生成 package.json 内容都使用默认值,那么输入命令 `npm init -y` 按回车即可。 * 命令执行完之后,在 somepackage 目录出现 package.json 文件。 * 自己手动在 somepackage 中新建一个 index.js 文件。 * 运行此包: * `node .` 执行当前项目 packjson 中 main 指向的 JavaScript 文件。 * `npm run test` 执行的是 scripts 中 test 字段对应命令。 ### 安装包,更新包,卸载包 ~~~ npm install ejs npm update ejs npm list ejs npm uninstall ejs ~~~ ### 使用包 参考官方文档,在当前项目中,新建两个文件写好下面的代码,之后在命令行运行 node index.js 就可以看到效果。 ``` // index.js const ejs = require('ejs'); people = ['geddy', 'neil', 'alex']; html = ejs.render('<%= people.join(", "); %>', {people: people}); console.log(html); ```