节点:ReferenceError:需求未定义

时间:2020-06-10 16:31:09

标签: javascript node.js

源代码是:

const Sequelize = require('sequelize');
const sequelize = new Sequelize(process.env["DSN"]);

当尝试通过节点执行 我坚持不尝试在浏览器中执行此代码)时,我得到了:

$ node Sequelize.js
file:///Users/snwfdhmp/project/Sequelize.js:1
const Sequelize = require('sequelize');
                  ^

ReferenceError: require is not defined
    at file:///Users/snwfdhmp/project/Sequelize.js:1:19
    at ModuleJob.run (internal/modules/esm/module_job.js:138:23)
    at async Loader.import (internal/modules/esm/loader.js:178:24)

为什么会这样?互联网上的每篇文章都说“不要在浏览器中使用require()”,但我没有使用浏览器。

我正在macOS 10.15.5上使用节点v14.4.0。

1 个答案:

答案 0 :(得分:2)

如果您在 package.json 中定义了"type": "module",则应将其删除。

原因是,某些CommonJS变量在ES模块(reference)中不可用, 这些是:

require
exports
module.exports
__filename
__dirname

但是,可以使用module.createRequire()require导入到ES模块中。