错误 [ERR_PACKAGE_PATH_NOT_EXPORTED]:包子路径“./v4”不是由“exports”定义的

The*_*One 16 node.js

使用 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
Run Code Online (Sandbox Code Playgroud)

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

const uuidv4 = require('uuid/v4');
Run Code Online (Sandbox Code Playgroud)

这是 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"
  }
Run Code Online (Sandbox Code Playgroud)

小智 34

ECMAScript 模块语法:

import { v4 as uuidv4 } from 'uuid';
uuidv4(); // ? '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
Run Code Online (Sandbox Code Playgroud)

CommonJS 语法:

const { v4: uuidv4 } = require('uuid');
uuidv4(); // ? '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
Run Code Online (Sandbox Code Playgroud)

  • 你能在这里提供一些背景信息吗?这是如何解决这个问题的? (14认同)
  • `uuid` 包的版本 7 已弃用深度导入 `require('uuid/v4')`,版本 8 删除了它们。这就是问题中的代码不起作用的原因,因为它使用包的版本 8,但尝试使用“require('uuid/v4')”导入它。这个答案通过不使用深度导入解决了问题。 (9认同)

Mig*_*ejo 10

另外一个选择

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


Tch*_*bam 7

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

解决了这个问题,将以下条目添加到已安装的uuidexports部分(在您的 内部):package.jsonnode_modules

"./v1": "./dist/v1.js"
Run Code Online (Sandbox Code Playgroud)

我的项目的完整导出部分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"
  },
Run Code Online (Sandbox Code Playgroud)

剩下的问题是我现在需要在 dist 安装中保留此修改...:/

这可以通过 uuid 源本身的补丁来修复吗?

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

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

  • 我建议将此作为 PR 提交到 uuid git 存储库。在最新版本(v8.3.2)上仍然出现此错误。我一路回到 v7.0.3 版本,以便能够正确地请求该模块。 (2认同)
  • 感谢您找出要回滚到哪个版本来修复:) (2认同)
  • 为什么坚持使用深度 require 语法?Deep require 已在 uuid@v7.x 中有意弃用并删除了 uuid@v8.x,升级说明在 [CHANGELOG](https://github.com/uuidjs/uuid/blob/master/CHANGELOG.md# 800-2020-04-29),更多上下文请参见 https://github.com/uuidjs/uuid/pull/361#issuecomment-585397739。[上面接受的答案](/sf/answers/4378854511/)适合您吗? (2认同)