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
忽略