源代码是:
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。
答案 0 :(得分:2)
如果您在 package.json 中定义了"type": "module"
,则应将其删除。
原因是,某些CommonJS变量在ES模块(reference)中不可用, 这些是:
require
exports
module.exports
__filename
__dirname
但是,可以使用module.createRequire()将require
导入到ES模块中。