【问题标题】:How to have yarn not issue a warning for the license field?如何让纱线不对许可证字段发出警告?
【发布时间】:2017-08-15 09:32:21
【问题描述】:

在运行yarn install 时,我每次都会看到一条警告,即使我已经定义了一个许可证,但也没有提交:

$ jq . package.json 
{
  "name": "license-example",
  "version": "1.0.0",
  "main": "index.js",
  "license": "UNLICENSED",
  "dependencies": {
    "lodash": "^4.17.4",
    "moment": "^2.18.1"
  }
}

根据npm defintion应该是有效的:

最后,如果您不希望授予他人使用私人 或任何条款下未发布的包:

{ "license": "UNLICENSED" }

这是输出:

yarn install
yarn install v0.27.5
warning ../package.json: No license field
[1/4] Resolving packages...
success Already up-to-date.
Done in 0.09s.

我的主要目标是让该警告消失,但我也不想提供无效的开源许可证来使警告消失,即使它是一个永远不会在外部看到的内部项目.

如何在不出现警告的情况下将纱线项目标记为专有?

【问题讨论】:

  • 很奇怪。如果配置正确,看不到它是如何发生的。 yarn 基本上检查它是一个字符串:github.com/yarnpkg/yarn/blob/… 尝试设置 {"private": true} 以完全跳过检查。
  • 我不认为是.license。这是LICENSE - 全部大写,没有扩展名。
  • 双重检查,无法重现。是否有机会获得重现问题的虚构 package.json?
  • @AlexBlex 我刚刚生成了一个示例项目,行为相同。请参阅 package.json 的更新问题。顺便说一句,我在 Ubuntu 上,这可能是与操作系统相关的错误吗?
  • 在 16.04 上使用问题中的包进行了测试。没有警告:node_modules/.bin/yarn install \n yarn install v0.27.5 \n [1/4] Resolving packages... \n success Already up-to-date. \n Done in 0.28s. \n

标签: javascript node.js package.json yarnpkg


【解决方案1】:

对于yarnnpm,默认行为是查找父目录。

我的主文件夹中有一个过时且被遗忘的package.json,但没有许可证字段:

~/package.json

在我的项目中运行 yarn install 时:

~/my-project/package.json

yarn 然后也在我的主目录中找到了那个并报告了那个错误。我把它误认为是我项目的package.json

警告通过在父文件夹的路径前加上 .. 来明确这一点。

warning ../package.json: No license field

删除过时的package.json 后,我得到了预期的输出:

yarn install v0.27.5
[1/4] Resolving packages...
success Already up-to-date.
Done in 0.88s.

【讨论】:

  • 非常有帮助!这让我很困惑,写这些警告的人是否真的讨厌他们的工作......为什么不简单地写一个更清晰的温暖,比如“警告 ../package.json 在父目录中:没有许可证字段”?
  • 哈,相关:我每次打开 shell 时都会收到这个警告,结果在我的主文件夹中执行 yarn 后我有一个 package.json(因为 cd 很难)。感谢您的回答!
  • 有效!但这不是很危险吗?毕竟,如果您有错字并输入“UNLICENSE”,您的整个代码将在公共域中!难道没有比“UNLICENSED”更安全的表达方式了吗?
  • 谢谢,我的主目录中有 package.json,这就是我收到警告的原因。
  • "private": true 添加到package.json 文件是防止出现此警告的正确方法,在典型情况下,您的软件是专有的并且不打算向公众授权或发布。公认的答案是一个非常极端的边缘案例。请参阅下面的其他答案。
【解决方案2】:

我收到以下警告以及其他一些许可警告。

warning package.json: No license field
warning react-material-dashboard@0.3.0: No license field

我所做的只是将package.json 文件的private 属性更新为true

{
  "name": "some-application-name",
  "author": "Keet Sugathadasa",
  "email": "email",
  "license": "MIT",
  "version": "0.0.1",
  "private": true,
  ...
}

有了这个,当我执行yarn install 时,我不再收到任何No license field 警告。要了解原因,请参阅this question

{"private": true} 表示 npm 将拒绝发布它,以防止意外发布私有存储库。

有关这方面的更多信息,请参阅以下链接。 https://docs.npmjs.com/files/package.json#private https://flaviocopes.com/package-json/#private

【讨论】:

  • 对我不起作用。
【解决方案3】:

仔细查看消息:

警告 ../package.json:没有许可证字段

它指的是更高一级目录的 package.json。
通过输入许可证字段或 privat: true 或删除它来修复它,因为它可能不应该在那里;-)

【讨论】:

  • 是的,我有一个package.json 更高的目录。删除后警告消失了。
  • 哇。谢谢你。我没注意。我的是../../package.json。为什么纱线在目录树上向上走两层?这似乎是非常奇怪的行为,因为我在运行命令的同一文件夹中有一个 package.json。
【解决方案4】:

在尝试了多种解决方案后,我发现根目录下有以下文件,需要删除:

cd ~
~$ rm -rf package.json
~$ rm -rf yarn.lock
~$ rm -rf package-lock.json

【讨论】:

    【解决方案5】:

    我遇到了同样的错误,我发现当我们添加package.jsonyarn 时,系统根目录中可能存在一些文件。因此,错误来自系统根目录。您可以简单地删除这些文件,错误将不再存在。

    1. 只要 cd ~,就可以找到 package.json & yarn.lock。
    2. rm -rf package.json 或 rm -rf yarn.lock

    【讨论】:

      【解决方案6】:

      只需确保您位于包含 package.json 文件的目录中,然后只需 yarnnpm 安装,然后 serve 将其作为拜托了。

      我目前正在运行一个没有许可证字段的项目,它运行良好, 我认为这不会返回错误。

      此外,请参阅有关运行包所需的必填字段的更多信息以及有关使用 yarn/npm 的 package.json 文件的其他提示:

      https://classic.yarnpkg.com/en/docs/package-json/
      
      https://docs.npmjs.com/files/package.json
      

      【讨论】:

        【解决方案7】:

        我有类似的问题,我刚刚升级了 Node 的版本,一切正常.....

        【讨论】:

        • 嗨,Sybghat。你能解释一下哪个版本有问题以及你更新到了什么?
        • 我有版本 8 并将其更新为 10 我遵循以下步骤: 1- sudo apt install curl 2- curl -sL deb.nodesource.com/setup_10.x | sudo -E bash - 3- sudo apt install nodejs
        • 我已将您的评论移至答案中。请随意编辑它,但你认为最好:)
        猜你喜欢
        • 1970-01-01
        • 2021-07-08
        • 1970-01-01
        • 2021-03-11
        • 1970-01-01
        • 1970-01-01
        • 2014-01-24
        • 2019-07-13
        • 1970-01-01
        相关资源
        最近更新 更多