8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

punycode 在 npm 中已被弃用 - 我应该用什么来替代它?

Ankita Basu 1月前

53 0

我在我的 Angular 项目中使用 npm 模块 punycode。VsCode 告诉我它已被弃用,并且 https://nodejs.org/api/punycode.html#punycode_punycodeconfirms:punycode 模块的版本 bun...

我在我的 Angular 项目中使用 npm 模块 punycode 。VsCode 告诉我它已被弃用,并且 https://nodejs.org/api/punycode.html#punycode_punycode 确认:

Node.js 中捆绑的 punycode 模块版本已弃用。在 Node.js 的未来主要版本中,此模块将被删除。当前依赖 punycode 模块的用户应改用用户空间提供的 Punycode.js 模块。

建议切换到“用户空间提供”模块。那是什么?

有一个指向 https://github.com/mathiasbynens/punycode.js ,我尝试将其包含在我的 package.json 中而不是“punycode”,但出现了同样的错误。

帖子版权声明 1、本帖标题:punycode 在 npm 中已被弃用 - 我应该用什么来替代它?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Ankita Basu在本站《firebase》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我认为这适用于 node.js,因为它是 Angulare,我们只使用 es6 导入,而不是 commonJs 节点导入

  • 这只是从解析的位置进行更改。您必须强制导入来自本地(node_modules 等),而不是来自 node.js 库。尝试

  • 我已经这样做了,并将(例如)toUnicode 的用法更改为 punycode.toUnicode(),这确实“抑制”了弃用错误,但我不确定,因为没有类型知识(toUnicode 是“任何”),所以我需要进一步检查一下。不过还是谢谢你。

  • \'punycode 在 npm 中已弃用\' — — 挑剔:punycode 在 node 中已弃用,但在 npm 中尚未弃用

  • 最近我也遇到了同样的问题。

    我强烈建议您使用该节点的 LTS(长期支持)版本。

    您可以在此处验证版本: https://nodejs.org/en

    当我写这个答案时,节点 LTS 版本是 20.10.0

    那么您应该在命令行中执行以下操作:

    $nvm install 20.10.0
    $nvm use 20.10.0
    

    这解决了问题,因为让您使用经过最充分测试和认可的版本。

    如果我使用具有最新功能的版本(实际上是 21.5.0),我将面临此处报告的问题。顺便说一下,github 上有一个问题可以解决它。

    您可以在此处查看更多详细信息: https://github.com/yarnpkg/yarn/issues/9005

  • \'降级节点\' 不是一个面向未来的解决方案。yarn 和 pngwin 通过使用 NPM 中的 punycode 解决了这个问题:const punycode = require('punycode/');

  • @MUHAMMADSHAHIDRAFICP 一旦你在 10 月份开始使用 v22(当它成为 LTS 时),你很可能会开始看到这个问题,除非使用 punycode 的库已经切换。它仍然会被弃用

  • 此警告仅表示您的项目依赖项之一正在使用 punycode 已弃用的模块。我按照以下步骤修复了错误:

    1. 运行 npm ls punycode 以使用 punycode 查看依赖项。
     [email protected]
      [email protected]
        [email protected]
          [email protected]
            [email protected] deduped
     [email protected]
       [email protected]
         [email protected]
    
    1. 运行 npm update <package1> <package2> ... 以解决警告。在此示例中,我运行了 npm update expo expo-dev-client
  • npm update expo expo-router jest-expo node v21.7.3 macos 之后仍然有 \'DeprecationWarning: The punycode module is deprecated.\'

  • 虽然 punycode 已被弃用,但您至少现在仍然可以使用它,并忍受警告。但是,为了为将来的移除做好准备,最好还是弄清楚它在哪里使用并在移除之前解决它。谨慎行事总比事后后悔好。

    1. 选项 --trace-deprecation 传递给 来追踪 punycode 的使用情况 node 。如果它是由 触发的 npx ,则 npx 使用 ----node-options --trace-deprecation .
    2. 解决触发警告的代码。
      • If this is your own code, replace punycode with alternatives.
      • If this is a dependency, contact the maintainer of the dependency. Chances are the dependency may be unmaintained if the warning has been left for a long time. If this is the case, it's better replacing the dependency.
  • 请参阅此 GitHub 问题

    就我而言,尽管我的代码库中没有直接使用 punycode,但 Nodemailer 依赖它。为了解决这个问题,我实现了一个自定义脚本,如链接的 GitHub 问题中所述。

    如果您的情况不同,您可能需要确定哪个库正在使用 punycode,并应用类似的解决方法,直到官方发布修复程序。请随时公开分享测试用例,我很乐意为您提供进一步的帮助。

  • 引用 13

    固定的

    正如 NPM 所提到的

    https://www.npmjs.com/package/punycode#installation

    第一的

    抛出 VSC 搜索栏

    您必须按下右下角的 3 个点并在“要包含的文件”文本框中选择 ./node_modules

    或者右键单击 node_modules 文件夹并选择“在文件夹中查找”

    然后 你可以替换所有

    require("punycode"); require("punycode/");

    并且所有带有单引号的

    require('punycode'); require('punycode/');

  • 步骤1:

    用于 npm ls punycode 查找正在使用的依赖项 punycode .

    就我而言,即 ajv 来自 typescript-eslint/parser

    from node_modules/@typescript-eslint/parser
       [email protected]
         [email protected]
           [email protected]
    

    当我查看 ajv 通过编辑 ajv 覆盖了版本 package.json

      "overrides": {
        "ajv": "^8.17.1"
      }
    

    npm ls punycode 说不再有依赖关系。但就我而言,当再次运行该应用程序时,警告仍然存在。

    步骤2

    通过添加 --trace-deprecation 编译脚本,我们发现其他依赖项仍在使用 punycode

    "scripts": {
        "compile": "tsc && node --trace-deprecation dist/src/app.js",
    }
    

    并发现 whatwg-url 正在使用 punycode .

     @google-cloud/[email protected]
       [email protected]
         [email protected]
           [email protected]
             [email protected]
               [email protected]
    

    经研究 whatwg-url ,新版本也解决了该问题。

    我们 package.json 再次

      "overrides": {
        "ajv": "^8.17.1",
        "whatwg-url": "^14.0.0"
      }
    

    不再有警告:)

  • 引用 15

    \'whatwg-url\': \'^14.0.0\' 仍依赖于相同的 [email protected]。不确定这对您来说如何运作。

  • 根据我的经验,使用 ('punycode/') 的这个解决方案不起作用。它似乎在任何 LTS 版本上都没有问题,但在 21.^ 及以上版本上(不幸的是,我还没有看到任何黑客攻击)不起作用(到目前为止)。我今天早上尝试了最终的 LTS 版本 (v20.11.0),它可以工作。

  • 我还收到消息:

    (node:14220) [DEP0040] DeprecationWarning:该 punycode 模块已弃用。请使用用户空间替代方案。

    我通过运行解决了它 npm update ajv .

    AJV 代表另一个 JSON 模式验证器。

  • R H 1月前 0 只看Ta
    引用 18

    几周前,删除 ajv 中的 punycode 依赖项的更改已被撤销,因此这可能不起作用/可能会停止工作。

  • 通常,该 punycode 模块的用途只是将域名转换为 ASCII,例如,在对地址进行 MIME 编码时。

    是的,模块可以做很多事情,但通常情况下,您只是使用该 toASCII() 函数,并为其提供一个域名。为此,这种弃用、对魔法尾部斜杠的混淆、使用 ESM 导入时的进一步混淆,最终都变得有点复杂。

    如果是这样的话,那么 domainToASCII() 中的函数 node:url 可能是一种更简单的方法来获得您想要的结果。

  • 如果您想使用 Node 21 或更高版本(迟早您会用到,我们都会用到),这里的主要问题是许多第三方库依赖于本机, punycode 并且您无法轻松访问它们。

    事实上,您确实拥有良好的访问权限。

    请参阅此处的解决方案: https://github.com/mathiasbynens/punycode.js/issues/137

返回
作者最近主题: