1、npm prefix
此命令用于显示前缀
1.1 使用语法
npm prefix [-g]
1.2 描述
将本地前缀打印到标准输出。 这是包含 package.json
文件或 node_modules
目录的最近父目录,除非还指定了 -g
。
如果指定了 -g
,这将是全局前缀的值。
1.3 示例
2、npm prune
此命令用于删除与项目无关得包。
2.1 使用语法
npm prune [[<@scope>/]<pkg>...]
首先看一下目前项目得包,如下所示:
运行 npm prune 进行处理,如下所示:
发现有部分文件无法删除,其他得安装包都已删除。再次查看,如下图所示:
2.1 描述
此命令删除 "extraneous" 包。 如果提供了包名称,则仅删除与提供的名称之一匹配的包。
无关的包是那些存在于 node_modules
文件夹中的包,它们没有被列为任何包的依赖列表。
如果指定了 --production
标志或 NODE_ENV
环境变量设置为 production
,则此命令将删除你的 devDependencies
中指定的包。 设置 --no-production
将否定 NODE_ENV
设置为 production
。
如果使用 --dry-run
标志,则实际上不会进行任何更改。
如果使用 --json
标志,则 npm prune
所做的更改(或将使用 --dry-run
所做的更改)将打印为 JSON 对象。
在正常操作中,无关的模块会被自动修剪,因此你只需要带有 --production
标志的此命令。 然而,在现实世界中,操作并不总是 "normal"。 当发生崩溃或错误时,此命令可以帮助清理任何产生的垃圾。
3、npm publish
此命令用于发布一个包
3.1 使用语法
npm publish <package-spec>
3.2 描述
将包发布到注册表,以便可以按名称安装。
默认情况下,npm 将发布到公共注册表。 这可以通过指定不同的默认注册表或在名称中使用 scope
并结合范围配置的注册表来覆盖。
package
的解释方式与其他命令相同(如 npm install
,可以是:
- a) 包含由 package.json
文件描述的程序的文件夹 - b) 一个 gzipped tarball,包含 (a)
- c) 解析为 (b) 的 url
- d) 在注册表上发布的
<name>@<version>
,带有 (c) - e) 指向 (d) 的
<name>@<tag>
- f) 具有满足 (e) 的 "latest" 标签的
<name>
- g) 解决为 (a) 的
<git remote url>
如果指定注册表中已存在包名称和版本组合,则发布将失败。
一旦使用给定名称和版本发布了一个包,该特定名称和版本组合将永远无法再次使用,即使它已被 npm unpublish删除。
从 npm@5
开始,在发布期间,将在发布期间将 sha1sum 和带有 sha512sum 的完整性字段提交给注册表。 后续安装将使用支持的最强算法来验证下载。
与 --dry-run
类似,参见 npm pack,它计算出要包含的文件并将它们打包到一个 tarball 中以上传到注册表。
包中包含的文件
要查看将包含在你的包中的内容,请运行 npm pack --dry-run
。 默认情况下包含所有文件,但以下情况除外:
- 始终包含与包安装和分发相关的某些文件。 例如,
package.json
、README.md
、LICENSE
等。 - 如果 package.json中有 "files" 列表,则仅包含指定的文件。 (如果指定了目录,那么它们将被递归遍历并包含它们的内容,遵循相同的忽略规则。)
- 如果有
.gitignore
或.npmignore
文件,则其中被忽略的文件和所有子目录都将从包中排除。 如果两个文件都存在,则忽略.gitignore
,只使用.npmignore
。.npmignore
文件跟随 相同的模式规则为.gitignore
文件 - 如果文件与某些模式匹配,则永远不会包含它,除非明确添加到
package.json
中的"files"
列表中,或者在.npmignore
或 .gitignore文件中使用!
规则取消忽略。 - 符号链接从不包含在 npm 包中。
4、npm query
4.1 使用语法
npm query <selector>
4.2 描述
npm query命令允许使用css选择器来检索依赖对象的数组。
4.3 示例
1、使用postinstall脚本查找所有依赖项并卸载它们
npm query ":attr(scripts, [postinstall])" | jq 'map(.name)|join("\n")' -r | xargs -I {} npm uninstall {}
2、找到所有git依赖项并解释谁需要它们
npm query ":type(git)" | jq 'map(.name)' | xargs -I {} npm why {}
3、查询所有依赖
npm query "*"
4、查询所有直接依赖
npm query ":root > *"
5、查询所有直接生产依赖
npm query(":root > .prod")
6、查询所有直接开发依赖
npm query(":root > .dev")
7、查询jqeury 依赖
npm query "#jquery"
8、获取特定许可证(MIT或ISC)的依赖项
npm query "[license=MIT], [license=ISC]"
9、查找所有包含@ruyadorno作为贡献者的包
:attr(contributors, [email=ruyadorno@github.com])
以上只是一些常见的示例,具体可以参考npm官网
5、npm rebuild
5.1 使用语法
npm rebuild [<package-spec>] ...] 别名: rb
5.2 描述
此命令在匹配的文件夹上运行npm build命令。当您安装新版本的节点,并且必须使用新的二进制文件重新编译所有C++插件时,这很有用。当使用--ignore-scripts
和--no-bin-links
安装时,明确选择要构建的包并且/或链接bins也很有用。
如果提供了一个或多个包规范,则只会重建名称和版本与其中一个说明符匹配的包。
注意:使用npm-rebuild在本地系统或生产环境中重建所有npm软件包可能需要一些时间。 在某些情况下,使用npm-rebuild重建整个项目的操作甚至可能需要数小时。
6、npm repo
6.1 使用语法
npm repo [<pkgname> [<pkgname> ...]]
6.2 描述
该命令会在浏览器中打开包仓库页面。
此命令尝试猜测包的存储库 URL 的可能位置,然后尝试使用 --browser 配置 参数打开它。 如果没有提供包名,它将在当前文件夹中搜索 package.json
并使用 repository
属性。
例如打开jquery的仓库页面。
7、npm restart
7.1 使用语法
npm restart [-- <args>]
7.2 描述
这将重新启动一个项目。 相当于运行 npm run-script restart
。
如果当前项目在 package.json
中指定了 "restart"
脚本,则将运行以下脚本:
- prerestart
- restart
- postrestart
如果它没有指定 "restart"
脚本,但它确实有 stop
和/或 start
脚本,则将运行以下脚本:
- prerestart
- prestop
- stop
- poststop
- prestart
- start
- poststart
- postrestart
8、npm root
8.1 使用语法
npm root
8.2 描述
将有效的 node_modules
文件夹打印到标准输出。
在使用 node_modules
文件夹执行操作的 shell 脚本中使用 npm 很有用。 例如:
#!/bin/bash global_node_modules="$(npm root --global)" echo "Global packages installed in: ${global_node_modules}"
9、npm run-script
9.1 使用语法
npm run-script <command> [-- <args>] 别名: run, rum, urn
9.2 描述
这会从包的 "scripts"
对象运行任意命令。 如果没有提供 "command"
,它将列出可用的脚本。
run[-script]
由 test、start、restart 和 stop 命令使用,但也可以直接调用。 当包中的脚本被打印出来时,它们被分为生命周期(测试、启动、重启)和直接运行的脚本。
任何位置参数都会传递给指定的脚本。 使用 --
传递以 -
为前缀的标志和选项,否则它们会被 npm 解析。
例如:
npm run test -- --grep="pattern"
参数只会传递给 npm run
之后指定的脚本,而不是任何 pre
或 post
脚本。
env
脚本是一个特殊的内置命令,可用于列出脚本在运行时可用的环境变量。 如果你的包中定义了 "env" 命令,它将优先于内置命令。
除了 shell 预先存在的 PATH
之外,npm run
还将 node_modules/.bin
添加到提供给脚本的 PATH
中。 本地安装的依赖提供的任何二进制文件都可以在没有 node_modules/.bin
前缀的情况下使用。 例如,如果你的包中 tap
上有一个 devDependency
,你应该写:
"scripts": {"test": "tap test/*.js"}
代替
"scripts": {"test": "node_modules/.bin/tap test/*.js"}
运行脚本的实际 shell 取决于平台。 默认情况下,在类 Unix 系统上是/bin/sh命令,在 Windows 上是 cmd.exe。/bin/sh 所指的实际外壳也取决于系统。
脚本从包文件夹的根目录运行,无论调用 npm run
时当前工作目录是什么。 如果你希望脚本根据你所在的子目录使用不同的行为,你可以使用 INIT_CWD
环境变量,它包含你在运行 npm run
时所在的完整路径。
npm run
将 NODE
环境变量设置为执行 npm
的 node
可执行文件。
如果你尝试在没有 node_modules
目录的情况下运行脚本但它失败了,你将收到运行 npm install
的警告,以防你忘记了。
例如,我们会在package.json文件中,事先配置一些常用脚本,方便我们运行。
运行 npm run start 我们可以启动当前项目,可以指定命令是环境变量里面配置的,也可以指向node_modules中可运行的命令。
10、npm search
10.1 使用语法
npm search [search terms ...] 别名: find, s, se
10.2 描述
在注册表中搜索与搜索词匹配的包。 npm search
通过包元数据对注册表中的所有文件执行线性、增量、按词法排序的搜索。 如果你的终端支持颜色,它将进一步高亮结果中的匹配项。 这可以通过配置项 color
禁用
此外,使用与更多搜索词配对的 --searchopts
和 --searchexclude
选项将包括和排除更多模式。 --searchopts
和标准搜索词的主要区别在于前者不会在输出中高亮结果,你可以使用它们进行更细粒度的过滤。 此外,你可以将这两者都添加到你的配置中以更改默认搜索过滤行为。
搜索还允许在搜索结果中定位维护者,方法是在他们的 npm 用户名前加上 =
。
如果一个词以 /
开头,那么它会被解释为一个正则表达式并支持标准的 JavaScript RegExp 语法。 在这种情况下,搜索将忽略尾随的 /
。 (请注意,你必须在大多数 shell 中转义或引用许多正则表达式字符。)
10.3 示例
我们尝试搜索一个包(jiang-isarray)如下所示:
npm search jiang-isarray