错误[ERR_PACKAGE_PATH_NOT_EXPORTED]: 在/app/node_modules/@babel/helper-compilation-targets/package.json中未解析出“exports”主要项。

83

我在travis CI pipeline中构建nuxt镜像时出现了问题。我的本地环境是ubuntu 18.04 - docker版本为19.03.11,docker-compose版本为1.24.1。我能够在本地构建和运行我的镜像,但在travis CI上却出现以下错误

Step 5/7 : RUN npm run build
 ---> Running in d3e9433b79f0
> nuxt_app@1.0.0 build /app
> nuxt build
ℹ Production build
✔ Builder initialized
✔ Nuxt files generated
ℹ Compiling ClientStarting type checking service...
ℹ Using 1 worker with 2048MB memory limit
✔ Client: Compiled with some errors in 1.62s
Hash: 1b9cf81215d31b9f0ed3
Version: webpack 4.43.0
Time: 1624ms
Built at: 06/07/2020 2:20:27 PM
                  Asset      Size  Chunks               Chunk Names
4bff68cc9fb4c003b7f2.js  1.49 KiB       1  [immutable]  runtime
b4f22db01be076446c20.js   1.4 KiB       0  [immutable]  app
Entrypoint app = 4bff68cc9fb4c003b7f2.js b4f22db01be076446c20.js
ERROR in ./.nuxt/client.js
Module build failed (from ./node_modules/babel-loader/lib/index.js):
Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main resolved in /app/node_modules/@babel/helper-compilation-targets/package.json
    at applyExports (internal/modules/cjs/loader.js:491:9)
    at resolveExports (internal/modules/cjs/loader.js:507:23)
    at Function.Module._findPath (internal/modules/cjs/loader.js:635:31)
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:953:27)
    at Function.Module._load (internal/modules/cjs/loader.js:842:27)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/app/node_modules/@babel/preset-env/lib/debug.js:8:33)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/app/node_modules/@babel/preset-env/lib/index.js:11:14)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
 @ multi ./.nuxt/client.js app[0]
 FATAL  Nuxt build error
  at WebpackBundler.webpackCompile (node_modules/@nuxt/webpack/dist/webpack.js:5326:21)
  at processTicksAndRejections (internal/process/task_queues.js:97:5)
  at async WebpackBundler.build (node_modules/@nuxt/webpack/dist/webpack.js:5275:5)
  at async Builder.build (node_modules/@nuxt/builder/dist/builder.js:5598:5)
  at async Object.run (node_modules/@nuxt/cli/dist/cli-build.js:100:7)
  at async NuxtCommand.run (node_modules/@nuxt/cli/dist/cli-command.js:2575:7)

我的 Travis CI

sudo: required

dist: trusty

services:
    - docker

# language: node_js
# node_js: 12

before_install:
    - sudo rm /usr/local/bin/docker-compose
    - sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    - sudo chmod +x /usr/local/bin/docker-compose
    - sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    - sudo chmod 400 -R .ops/ssh/*

# before_script:
#     - my_script

script:
    - .ops/build.sh
    - .ops/push.sh

我的docker-compose文件

    web:
        build:
            context: ${GITROOT:-.}
            dockerfile: Dockerfile.web
        image: moovinit_web
        container_name: moovinit_web
        command: npm start
        environment:
            WEB_PORT: ${WEB_PORT:-3200}
            API_URL: ${API_URL:-http://api:3201}
            <<: *node-common

为什么我的笔记本电脑可以构建,但在travis上不能构建?

11个回答

100

对我来说,使用npm update解决了相同的错误。


1
只需更新 @babel/ 模块即可。这对我和一些开源项目也有效。 - ilyazub
这对我解决了问题,而且我在discord.js中遇到了这个问题。 - diggity
6
就像本页上的大多数答案一样,这是一个巫术式的回答:没有解释为什么会出现错误,所谓的解决方案到底做了什么(是否有任何副作用?)以及为什么它被认为可以解决问题。因此,有时它可以解决问题(但可能会引入新问题),有时它会失败(并可能仍然引入新问题)。 - rapt
发生这种情况的原因是什么?这个命令如何解决问题? - VishalParkash
有时候你得拥抱巫术——(同样,对我也起作用) - undefined

59

我曾遇到过类似的问题。npm install @babel/helper-compilation-targets --save-dev 解决了这个情况。


我在Heroku构建我的应用程序时遇到了这个问题,这解决了我的问题。 - realsarm
我在上传到Netlify时遇到了错误,但是运行npm install @babel/helper-compilation-targets --save-dev就可以解决。 - Diego Santa Cruz Mendezú

25

我遇到了这个问题,解决方法是删除锁定文件,然后重新安装一切。

这可能不是每个人的好解决方案,但对我有效。

以下是我所做的:

  1. 删除锁定文件。在这种情况下,我使用yarn,因此需要删除yarn.lock文件。如果您使用npm锁定文件则是package-lock.json
# for yarn user
rm yarn.lock

# for npm user
rm package-lock.json
  1. 然后我重新安装了所有的依赖项。

# for yarn user
yarn install

# for npm user
npm install

1
你绝不能删除锁定文件,它具有重要的安全相关目的。深度更新命令将是更好的选择。 - Slava Fomin II
3
@SlavaFominII,是的,这就是为什么要加上免责声明“这可能不是每个人的好解决方案,但它对我有效。” - Rohman HM
它对我有效。 - Agna JirKon Rx

15
对我有效的解决方案是更新Node。例如,使用12.22.0和14.17.4版本的Node均可正常运行,但请注意13.x版本将根本无法工作。我也遇到了这个问题,并发现此错误似乎特定于某些Node.js版本。其中,节点13.14.0、节点12.18.4、12.19.0和12.19.1显示错误:ERR_PACKAGE_PATH_NOT_EXPORTED。而使用节点12.20.0和14.17.4则不会出现错误。问题在于已创建了一种新的导出系统,如此定义:https://github.com/nodejs/modules/issues/535。该功能允许使用通配符(例如:*)来定义包中可能存在的允许要求。
  "exports": {
    ".": {
      "import": "./dist/pako.esm.mjs",
      "require": "./index.js"
    },
    "./package.json": "./package.json",
    "./dist/*": "./dist/*",
    "./lib/*": "./lib/*",
    "./lib/zlib/*": "./lib/zlib/*",
    "./lib/utils/*": "./lib/utils/*"
  },

这个功能的拉取请求可以在这里找到:https://github.com/nodejs/modules/issues/535

现在,如果您在导出文件中使用了使用此新“glob”功能的包,则在要求该特定文件时可能会失败。


更多信息请参见https://nodejs.org/api/packages.html#subpath-imports - Dragan Okanovic
是的,它使用节点版本12.20.0工作,而我的旧版本v12.18.2无法工作,非常感谢。 - Weam Adel
Node.js听起来像是一个“稳定”,“一致”,“用户友好”的系统。在保留基本向后兼容性的同时引入这个功能并不是什么难事,但对于Node.js来说可能有些过分要求了。 - rapt
@DraganOkanovic 如果我必须编写一份难以理解的文档,我也不可能比Node文档团队做得更好。但必须承认,他们也不必要地试图重新发明轮子,并创建一个复杂的系统即使有一个好的文档也很难解释清楚。 - rapt

8

快速解决方案:

yarn相关:

yarn upgrade

对于npm

npm update

yarn update 对我很有帮助,谢谢。 - Pranoy Sarkar
是的,这对我来说是正确的解决方案。谢谢。 - Horatio

8

通过 npm update && npm audit fix --force 命令修复问题。


1
这解决了我的问题。我认为问题出在不兼容的NextJS版本上。当我克隆了一个NextJS教程项目并尝试运行npm run dev时,出现了这个问题。 - Africanfruit
我在我的NextJS应用程序上也遇到了同样的问题。npm update --force解决了它。 - Abhik Banerjee

4

UUID npm模块导致了这个错误,

// const uuidv4 = require('uuid/v4'); // OLD
const { v4: uuidv4 } = require('uuid'); // NEW

删掉 node_modules 和 package-lock.json 没有帮助


这不是问题的正确答案。如果您还不知道答案,可以先开始评论。 - Rohman HM
3
好的,我因为同样的错误到了这里,这就是解决我的问题的方法。如果有人由于这个原因遇到同样的问题,可能会得到帮助。 - JBB
这个问题已经在这里得到了解答- https://dev59.com/elIG5IYBdhLWcg3w3Fk_ - paradocslover
@paradocslover,感谢您的指点,确实当我遇到同样的问题时,那个答案没有出现。 - JBB
2
我也使用相同的错误得到了这个SO答案。 - mike james

2

从所有答案中可以猜测,此错误是由与已安装的npm版本不兼容的软件包引起的。并不总是通过更新node来解决问题,有时您需要将其降级。

我在使用Jhipster时遇到了这个问题,在lts上无法工作,但在我的同事机器上(他的node版本为v14.17.0)可以正常工作。以下是我如何做到的(使用nvm):

nvm install 14.17.0
nvm use 14.17.0

将14.17.0替换为您需要使用的导致错误的软件包版本。


1

我遇到了一个非常类似的问题: Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in /home/dima/Projects/project/node_modules/@babel/helper-compilation-targets/package.json

我试图启动一个旧项目,并安装了最新版本的 Node 12(最初用于该项目):v12.22.12。对于一个小修复,我犹豫是否对项目进行主要的 Node 版本升级。但是使用这个版本时,我遇到了这个错误。在阅读 edi9999 的答案后,我尝试将 Node 降级到项目在主要开发期间使用的精确 Node 版本:v12.13.0。使用这个版本后,一切都正常工作。

看起来某些使用了内部 Node API 的 Babel 包在较新的 Node 12 中被移除了,因此导致出现了问题。所以如果你有类似的情况,请尝试使用旧项目的精确 Node 版本。


1

对我来说,这些答案都没有起作用,经过一番挖掘,我找到了问题所在。有一些模块正在使用最佳JavaScript模块设计。因此,随着node的升级,你可能会开始为这些模块遇到这个错误。在我的情况下,我切换到了node 18.x。

例如,我在graphql-upload模块中遇到了这个问题。

因此,不要使用:

import { graphqlUploadExpress } from 'graphql-upload';

我改成了:

import graphqlUploadExpress from 'graphql-upload/graphqlUploadExpress.mjs';

问题得到了解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接