npm
https://docs.npmjs.com/about-npm
- 集中管理所有模块,所有模块都上传仓库(registry)
- package.json 管理模块信息,node_modules 保存依赖
- 2020 npm 被 github 收购

常用操作
- npm init 初始化
- npm install 安装
- npm publish 发布
- npm run 运行
npm link
- https://docs.npmjs.com/cli/v8/commands/npm-link
```bash
在自己开发的包里执行,链接到全局
npm link
在要用的包里,执行, 就可以调试自己开发的包了
npm link xxx(上面的包名字)
解除链接
npm unlink
**利用 npm link,高效率在本地调试以验证包的可用性**<a name="jn7H1"></a>## npm init[https://docs.npmjs.com/cli/v6/commands/npm-init](https://docs.npmjs.com/cli/v6/commands/npm-init)<br />init 命令转化为对应的npx操作如下:- npm init foo -> npx create-foo- npm init @usr/foo -> npx @usr/create-foo- npm init @usr -> npx @usr/create<a name="iauSn"></a>## npx<a name="XT1FS"></a># packge.json[https://docs.npmjs.com/cli/v8/configuring-npm/package-json](https://docs.npmjs.com/cli/v8/configuring-npm/package-json)<br />[http://nodejs.cn/learn/the-package-json-guide](http://nodejs.cn/learn/the-package-json-guide)- version 表明了当前的版本。- name 设置了应用程序/软件包的名称。- description 是应用程序/软件包的简短描述。- private 如果设置为 true,则可以防止应用程序/软件包被意外地发布到 npm。<a name="Jz74i"></a>## bin[https://docs.npmjs.com/cli/v8/configuring-npm/package-json#bin](https://docs.npmjs.com/cli/v8/configuring-npm/package-json#bin)<br />在bin字段下映射命令和对应的执行脚本```json{"name": "my-program","version": "1.2.5","bin": {"my-program": "program.js"}}
全局安装 my-program 命令会注册到全局,非全局的话会自动连接到项目的node_module/.bin下的可执行文件
脚本文件的首行要加上下面这句话,系统会自动通过 node 去执行
#!/usr/bin/env node
scripts
“scripts”要为部分中定义的任何脚本创建“pre”或“post”脚本 package.json
{"scripts": {"precompress": "{{ executes BEFORE the `compress` script }}","compress": "{{ run command to compress files }}","postcompress": "{{ executes AFTER `compress` script }}"}}
type
- type:默认为
commonjs,可以指定为为module,则变为ESM模块规范
入口
- main : 定义了 npm 包的入口文件,browser 环境和 node 环境均可使用
- module : 定义 npm 包的 ESM 规范的入口文件,browser 环境和 node 环境均可使用
- browser : 定义 npm 包在 browser 环境下的入口文件
优先级browser = browser+mjs > module > browser+cjs > main
- 如果 npm 包导出的是 ESM 规范的包,使用 module
- 如果 npm 包只在 web 端使用,并且严禁在 server 端使用,使用 browser。
- 如果 npm 包只在 server 端使用,使用 main
- 如果 npm 包在 web 端和 server 端都允许使用,使用 browser 和 main
exports
{"name":"pkg","main": "./main-require.cjs","exports": {"import": "./main-module.js","require": "./main-require.cjs"},"type": "module"}
如果存在exports属性,exports属性不仅优先级高于main,同时也高于module和browser字段。
files
file字段是一个包含在你项目里的文件的数组,里面的内容是文件名或者文件夹名。如果是文件夹,那么里面的文件也会被包含进来
也可以使用.npmignore忽略
