esm: fix module.exports export on CJS modules
PR-URL: https://github.com/nodejs/node/pull/57366 Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
parent
599ec77679
commit
fbe37d501e
@ -188,10 +188,13 @@ function createCJSModuleWrap(url, source, isMain, format, loadCJS = loadCJSModul
|
||||
const { exportNames, module } = cjsPreparseModuleExports(filename, source, format);
|
||||
cjsCache.set(url, module);
|
||||
|
||||
const wrapperNames = [...exportNames, 'module.exports'];
|
||||
const wrapperNames = [...exportNames];
|
||||
if (!exportNames.has('default')) {
|
||||
ArrayPrototypePush(wrapperNames, 'default');
|
||||
}
|
||||
if (!exportNames.has('module.exports')) {
|
||||
ArrayPrototypePush(wrapperNames, 'module.exports');
|
||||
}
|
||||
|
||||
if (isMain) {
|
||||
setOwnProperty(process, 'mainModule', module);
|
||||
@ -212,7 +215,8 @@ function createCJSModuleWrap(url, source, isMain, format, loadCJS = loadCJSModul
|
||||
({ exports } = module);
|
||||
}
|
||||
for (const exportName of exportNames) {
|
||||
if (!ObjectPrototypeHasOwnProperty(exports, exportName) || exportName === 'default') {
|
||||
if (exportName === 'default' || exportName === 'module.exports' ||
|
||||
!ObjectPrototypeHasOwnProperty(exports, exportName)) {
|
||||
continue;
|
||||
}
|
||||
// We might trigger a getter -> dont fail.
|
||||
|
19
test/fixtures/es-modules/exports-cases.js
vendored
19
test/fixtures/es-modules/exports-cases.js
vendored
@ -1,9 +1,10 @@
|
||||
if (global.maybe)
|
||||
module.exports = require('../is-object');
|
||||
exports['invalid identifier'] = 'yes';
|
||||
module.exports['?invalid'] = 'yes';
|
||||
module.exports['π'] = 'yes';
|
||||
exports['\u{D83C}'] = 'no';
|
||||
exports['\u{D83C}\u{DF10}'] = 'yes';
|
||||
exports.package = 10; // reserved word
|
||||
Object.defineProperty(exports, 'z', { value: 'yes' });
|
||||
if (global.maybe)
|
||||
module.exports = require('../is-object');
|
||||
exports['invalid identifier'] = 'yes';
|
||||
module.exports['?invalid'] = 'yes';
|
||||
module.exports['π'] = 'yes';
|
||||
exports['\u{D83C}'] = 'no';
|
||||
exports['\u{D83C}\u{DF10}'] = 'yes';
|
||||
exports.package = 10; // reserved word
|
||||
Object.defineProperty(exports, 'z', { value: 'yes' });
|
||||
exports['module.exports'] = 5;
|
||||
|
Loading…
x
Reference in New Issue
Block a user