node.js - 在不全局安装的情况下将命令分配给我的 NPM 包
问题描述
一些 NPM 包被安装到一个项目中,然后你可以从你的项目中运行它们scripts
。
这方面的一个例子是webpack-dev-server
。
安装后,我只需要添加:
"dev": "webpack-dev-server"
在我的package.json
脚本中,它将启动webpack-dev-server
.
这是如何运作的?该命令未全局安装,但我的 Node 项目知道它已连接到我已安装的包。
我只能找到有关将我的命令添加到bin
我的包中的属性的信息package.json
,但除非包是全局安装的,否则这将不起作用。
我如何实现这一目标?是否有我无法找到的官方文档?
解决方案
你是对的,但你错过了一些小东西......
每个包都可以声明一个二进制文件。正如你所说,这是bin
在package.json
在安装时,npm 会将该文件符号链接到 prefix/bin 用于全局安装,或 ./node_modules/.bin/ 用于本地安装。
这正是这样webpack-dev-server
做的。它的二进制文件被安装在./node_modules/.bin/
.
由于约定,npm\npx 能够找到二进制文件并执行它。
在您的应用程序中,您可以利用此行为;并且任何依赖于您的包的包都将能够执行您的包二进制文件。
如果您想为运行脚本提供参数,请这样做
npm run webpack-dev-server -- --version
推荐阅读
- python - Random.choice(seq),更新一个列表
- python - 如何打开一个有很多参数的exe文件?
- laravel - NPM安装错误在laravel和vue js应用程序中
- javascript - 使用 Formik & Yup 在 FieldArray 中进行条件验证
- flutter - Flutter 中如何使用同一个按钮导航到不同的路由?
- gradle - Gradle - 如果依赖任务失败,如何防止依赖子模块的任务运行?
- c++ - Boost.Intrusive - 恒定时间迭代器
- javascript - 承诺后如何从react.js中的函数获取返回的数据
- sql - Redshift COPY 命令返回 stl_load_error 1205 无效的日期格式 - 长度必须为 10 或更多
- mongodb - 从线性 mongo 集合创建 4 级嵌套对象聚合输出