という話を聞いた。自分が遭遇したわけではない。これってどういう時に起こるんだろうか。ブラウザ上でrequire
するとこうなるのは知っているのが…。
気になったので適当に色々試していたら、ESMを使わなければいけない環境でrequireしようとすると出るっぽい。 例えばこんな感じのファイルを2つ作成します
// module_exports.js module.exports = { a: () => { return "module.exports!" }}
// require.js const {a} = require('./module_exports.js') console.log(a())
require.js
はちゃんと動きます
$ node require.js module.exports!
次にpackage.json
を作ってESModulesを有効にします
// package.json { "type": "module" }
この状態でrequire.js
を実行すると件のエラーが出ます。
$ node require.js const {a} = require('./module_exports.js') ^ ReferenceError: require is not defined
BabelやらTSを利用している場合の挙動はよく知りませんが、とにかくこのエラーが出るときは大体こういう原因なんじゃないでしょうか。素直にimportを使えば解決。
// export.js let a; export default a = () => { return "export!" }
// import.js import a from './export.js' console.log(a())