使 NPM 包管理器列表显示安装方向的全局标志
Posted
技术标签:
【中文标题】使 NPM 包管理器列表显示安装方向的全局标志【英文标题】:Make NPM Package Manager Listing show the global flag for the install directions 【发布时间】:2016-10-30 00:41:50 【问题描述】:在LEAN Stack Package 的 NPM 包管理器列表中,页面右上角显示了以下安装说明:
npm 安装精益堆栈
我需要它说:
npm install -g 精简堆栈
我已通读 package.json 文档,但找不到任何内容来说明这一点。我还在 package.json 中将 preferGlobal 变量设置为 true,这也没有任何区别。
【问题讨论】:
尽管您愿意,但软件包的安装类型(全局或其他)并不取决于您。您无权对开发人员施加这种限制。如果开发人员选择在本地安装你的包(推荐),你的包应该仍然可以工作。全局安装的包和源代码中的全局变量一样新奇。 是的,但以 express-generator 为例...它旨在在全球范围内使用。我不会称之为新手,我会称之为按设计运行。 不,express-generator 也很新奇。无论如何,这是题外话。任何知道-g
标志并希望使用它的 npm 用户都可以按照自己的意愿使用它。您无需将其推荐为默认设置。
严厉的政策。我们没有从 Xhtml 中学到东西吗?
引用 npm CEO 关于此功能请求 Yeah, we're never going to do this.
的内容,因此您应该在那里打开一个问题来讨论它,但目前,您根本不可能实现您想要的。
【参考方案1】:
无法做到,但要引起对全局安装选项的更多关注,您可以像此开发人员一样使用统计信息框:
【讨论】:
【参考方案2】:为什么你不能
无法在 npmjs.com 中显示为 npm install packageName -g
。你不能强迫人们将你的模块作为全局模块使用,实际上 npm 不建议使用全局模块,除非必要。
就像全局变量有点粗俗,但在某些情况下也是必要的一样,全局包很重要,但如果不需要,最好避免。
此外,如果您要部署到其他服务器等,即使是全局模块也会在本地使用以冻结包版本。
例如,使用 istanbul 进行测试覆盖,您可以在全局范围内使用该软件包,并且键入 istanbul test
更简单,但是在本地安装 istanbul 将冻结版本中的package.json 文件,以便在更新时保持其正常工作。
你本地安装,写node node_modules/istanbul/index.js test
伊斯坦布尔只是此处的一个示例用例。
显示警告:: preferGlobal
如果您的包主要是一个应该全局安装的命令行应用程序,则将此值设置为 true 以在本地安装时提供警告。
它实际上并不会阻止用户在本地安装它,但如果它不能按预期工作,它确实有助于防止一些混乱。
然而
设置preferGlobal: true
不足以在本地安装时触发警告。
为了获得消息,您必须检查以下清单:
有效的 package.json 文件。
在package.json
文件中包含dependencies
对象(即使它是空的)
在这些情况下您不会看到此消息:
如果你在一个非 npm 项目中(没有package.json
)。
如果你在一个 npm package-project 目录中,该目录恰好已经将包安装为本地依赖项。
来源:
https://***.com/a/28206992/5384679
https://github.com/npm/npm/issues/11652
https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/
【讨论】:
OP 的问题不是关于npm install
正在运行时的警告,而是关于this page 显示使用-g
的安装命令。您的答案中与 OP 的问题有关的唯一部分是说将 preferGlobal
设置为 true
但 OP 在他们的问题中指出 OP 已经这样做了。跨度>
@Louis 啊,好吧,这个问题有点误导,没有办法这么说,即使只有全局库在 npmjs 存储库中也没有这个。以上是关于使 NPM 包管理器列表显示安装方向的全局标志的主要内容,如果未能解决你的问题,请参考以下文章
三阶段课程——Day05(模块系统:自定义模块内置模块第三方模块;npm与包:包管路工具常用命令package.json包的分类包加载机制全局包)