◐ Shell
clean mode source ↗

esm: fix module.exports export on CJS modules · nodejs/node@5c20dcc

Original file line numberDiff line numberDiff line change

@@ -188,10 +188,13 @@ function createCJSModuleWrap(url, source, isMain, format, loadCJS = loadCJSModul

188188

const { exportNames, module } = cjsPreparseModuleExports(filename, source, format);

189189

cjsCache.set(url, module);

190190
191-

const wrapperNames = [...exportNames, 'module.exports'];

191+

const wrapperNames = [...exportNames];

192192

if (!exportNames.has('default')) {

193193

ArrayPrototypePush(wrapperNames, 'default');

194194

}

195+

if (!exportNames.has('module.exports')) {

196+

ArrayPrototypePush(wrapperNames, 'module.exports');

197+

}

195198
196199

if (isMain) {

197200

setOwnProperty(process, 'mainModule', module);

@@ -212,7 +215,8 @@ function createCJSModuleWrap(url, source, isMain, format, loadCJS = loadCJSModul

212215

({ exports } = module);

213216

}

214217

for (const exportName of exportNames) {

215-

if (!ObjectPrototypeHasOwnProperty(exports, exportName) || exportName === 'default') {

218+

if (exportName === 'default' || exportName === 'module.exports' ||

219+

!ObjectPrototypeHasOwnProperty(exports, exportName)) {

216220

continue;

217221

}

218222

// We might trigger a getter -> dont fail.