迁移到 Parcel 2 时出现“未捕获(承诺中)ReferenceError:未定义进程”

我正在尝试将 Node.js webapp 从 Parcel 1 迁移到 Parcel 2。

我在客户端 JavaScript 代码(包裹捆绑)中有一个函数,它调用我从后端 Node.js 代码中的实用程序函数文件导入的另一个函数。

所有其他前端功能都可以工作,并且所有其他需要 Node.js 进程的 Node.js 功能仍然可以工作。当我在代码中触发调用此函数时:

getCloudinaryUrl.js:22 Uncaught (in promise) ReferenceError: process is not defined

在 Parcel 1 中一切正常,所以我假设这是我的 Parcel 2 配置的问题,而不是 Cloudinary 的问题。

违规行:

在 getColudinaryUrl.js(后端)中:

const { Cloudinary } = require('cloudinary-core');
...
// this is what triggers the error
const cloudName = process.env.CLOUDINARY_CLOUD_NAME;
const cl = new Cloudinary({
  cloud_name: cloudName,
});

在 index.js(前端)中:

import getCloudinaryUrl from './../../utils/getCloudinaryUrl';
// then I'm calling it later on in the code

在 server.js(后端)中,这是代码中我执行 dotenv.config 的唯一位置:

const dotenv = require('dotenv');
...
dotenv.config({ path: './.env' });

我的旧 package.json 与 Parcel 1 一起工作:

...
"scripts": {
    ...
    "watch:js": "parcel watch ./public/js/index.js --public-url /js --out-dir ./public/js --out-file bundle.js",
    "build:js": "parcel build ./public/js/index.js --public-url /js --out-dir ./public/js --out-file bundle.js"
  },
  "devDependencies": {
    ...
    "parcel-bundler": "1.12.3",
    ...
  },
  "engines": {
    "node": "^14"
  }

我的新 package.json 文件不起作用:

...
"scripts": {
    ...
    "watch:js": "rm -rf .parcel-cache/ && parcel watch ./public/js/index.js --public-url /js --dist-dir ./public/js",
    "build:js": "rm -rf .parcel-cache/ && parcel build ./public/js/index.js --public-url /js --dist-dir ./public/js"
  },
"devDependencies": {
    ...
    "parcel": "^2.0.0-nightly.524",
    ...
  },
"engines": {
    "node": "^14"
  },
"default": "./public/js/bundle.js",
"targets": { 
    "main": false,
    "default": {
      "includeNodeModules": true,

      "scopeHoist": false
    }

  }

我添加了 rm -rf .parcel-cache/ && 因为否则第二次构建总是会失败。

我阅读了迁移指南和其他几个页面:

我读起来并不容易,而且由于相当新,Parcel 2 没有很多在线资源可供阅读。这就是我最终得到上面新的 package.json 文件的方式,它给了我最少的错误(不包括上面的那个)。

如果还有什么我应该补充的问题,我很乐意提供。

如何配置 Parcel 2 以检测该文件中的进程?

stack overflow "Uncaught (in promise) ReferenceError: process is not defined" when migrating to Parcel 2
原文答案

答案:

作者头像

就像将 CLOUDINARY_CLOUD_NAME=something 添加到项目根目录中的 .env 文件一样简单?

作者头像

有点晚了,但对于任何结束这里的人,我最终通过从 engines 中删除 package.json 键来修复它。