目录
1、npm prefix
1.1 使用语法
1.2 描述
1.3 示例
2、npm prune
2.1 使用语法
2.1 描述
3、npm publish
3.1 使用语法
3.2 描述
包中包含的文件
4、npm query
4.1 使用语法
4.2 描述
4.3 示例
5、npm rebuild
5.1 使用语法
5.2 描述
6、npm repo
6.1 使用语法
6.2 描述
7、npm restart
7.1 使用语法
7.2 描述
8、npm root
8.1 使用语法
8.2 描述
9、npm run-script
9.1 使用语法
9.2 描述
10、npm search
10.1 使用语法
10.2 描述
10.3 示例
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