【问题标题】:Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './v4' is not defined by "exports"错误 [ERR_PACKAGE_PATH_NOT_EXPORTED]:包子路径 './v4' 未由“exports”定义
【发布时间】:2020-10-14 09:10:39
【问题描述】:

我在使用 uuidv4 时遇到此错误。

Failure: Package subpath './v4' is not defined by "exports" in C:\Users\mycomp\Desktop\Programming\Javascript\Serverless\Serverless Framework\node_modules\uuid\package.json
Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './v4' is not defined by "exports" in C:\Users\mycomp\Desktop\Programming\Javascript\Serverless\Serverless Framework\node_modules\uuid\package.json

我已经安装了 uuid 并在我的代码中需要它

const uuidv4 = require('uuid/v4');

这是 package.json

"dependencies": {
  "aws-sdk": "^2.702.0",
  "moment": "^2.27.0",
  "serverless-offline": "^6.4.0",
  "underscore": "^1.10.2",
  "uuid": "^8.1.0"
}

【问题讨论】:

    标签: node.js


    【解决方案1】:

    ECMAScript 模块语法:

    import { v4 as uuidv4 } from 'uuid';
    uuidv4(); // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
    

    CommonJS 语法:

    const { v4: uuidv4 } = require('uuid');
    uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
    

    【讨论】:

    • 你能在这里提供一些上下文吗?这是如何解决问题的?
    • 同样,这个确切的代码给出了错误
    • uuid 包的第 7 版已弃用深度导入 require('uuid/v4'),第 8 版删除了它们。这就是问题中的代码不起作用的原因,因为它使用包的版本 8,但尝试使用 require('uuid/v4') 导入它。这个答案通过不使用深度导入解决了这个问题。
    • 谁能帮忙把它放在哪里?
    【解决方案2】:

    另一种选择

    const uuid = require('uuid');
    uuid.v4(); // "c438f870-f2b7-4b2c-a1c3-83bd88bb1d79"
    

    【讨论】:

      【解决方案3】:

      我们在使用 v1 uuid 模块 (v8.3.2) 时遇到了同样的错误。

      解决了这个问题,将以下条目添加到 已安装 uuid package.json在您的node_modules)的exports 部分:

      "./v1": "./dist/v1.js"
      

      我的项目的完整导出部分node_modules/uuid/package.json

        "exports": {
          ".": {
            "node": {
              "module": "./dist/esm-node/index.js",
              "require": "./dist/index.js",
              "import": "./wrapper.mjs"
            },
            "default": "./dist/esm-browser/index.js"
          },
          "./package.json": "./package.json",
          "./v1": "./dist/v1.js"
        },
      

      我现在需要在 dist 安装中保留此修改...:/

      这可以通过 uuid 源本身的补丁来解决吗?

      编辑:在我们自己的源代码中不需要该模块。它是 jest 的依赖项(通过一些 jest 报告子 pkg)。

      编辑:或者,回滚到 uuid dep 到 v7.0.3 也可以解决此问题,请参阅下面的评论。

      【讨论】:

      • 我建议将此作为 PR 提交到 uuid git repo。最新版本 (v8.3.2) 上仍然出现此错误。我一直退回到 v7.0.3 版本,以便能够正确地要求该模块。
      • 感谢您确定要回滚到哪个版本来修复 :)
      • @risingfish 你能给我的答案投票+1吗? :) 另外,我没有参与 uuid repo。 atm 我不愿意打开 PR,因为我不确定维护人员是否会认为这是一个修复 itfp。他们可能有理由破坏东西?你知道我的意思? :) 此外,此更改仅修复 v1 ...
      • 创建了一个 PR github.com/uuidjs/uuid/pull/584
      • 为什么要坚持使用 deep require 语法? Deep requires 在 uuid@v7.x 中被有意弃用并删除了 uuid@v8.x,升级说明在 CHANGELOG 中给出,更多上下文在 github.com/uuidjs/uuid/pull/361#issuecomment-585397739 中。 accepted answer above 对你有用吗?
      猜你喜欢
      • 2021-12-28
      • 2021-10-29
      • 2021-12-31
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2022-12-14
      • 2021-01-05
      • 2022-06-13
      相关资源
      最近更新 更多