module: runtime deprecate invalid package.json main entries

PR-URL: https://github.com/nodejs/node/pull/37204
Fixes: https://github.com/nodejs/node/issues/26588
Reviewed-By: Guy Bedford <guybedford@gmail.com>
Reviewed-By: Geoffrey Booth <webmaster@geoffreybooth.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
pull/37502/head
Antoine du Hamel 2021-02-03 14:19:24 +01:00
parent 80098e605c
commit 76a073b67e
4 changed files with 15 additions and 6 deletions

View File

@ -2350,12 +2350,15 @@ with no performance impact since Node.js 10.
### DEP0128: modules with an invalid `main` entry and an `index.js` file
<!-- YAML
changes:
- version: REPLACEME
pr-url: https://github.com/nodejs/node/pull/37204
description: Runtime deprecation.
- version: v12.0.0
pr-url: https://github.com/nodejs/node/pull/26823
description: Documentation-only.
-->
Type: Documentation-only (supports [`--pending-deprecation`][])
Type: Runtime
Modules that have an invalid `main` entry (e.g., `./does-not-exist.js`) and
also have an `index.js` file in the top level directory will resolve the

View File

@ -352,7 +352,7 @@ function tryPackage(requestPath, exts, isMain, originalPath) {
err.requestPath = originalPath;
// TODO(BridgeAR): Add the requireStack as well.
throw err;
} else if (pendingDeprecation) {
} else {
const jsonPath = path.resolve(requestPath, 'package.json');
process.emitWarning(
`Invalid 'main' field in '${jsonPath}' of '${pkg}'. ` +

View File

@ -1,5 +1,3 @@
// Flags: --pending-deprecation
'use strict';
const common = require('../common');

View File

@ -29,8 +29,7 @@ const path = require('path');
const backslash = /\\/g;
if (!process.env.NODE_PENDING_DEPRECATION)
process.on('warning', common.mustNotCall());
process.on('warning', common.mustCall());
console.error('load test-module-loading.js');
@ -107,7 +106,16 @@ const d2 = require('../fixtures/b/d');
assert.strictEqual(require('../fixtures/packages/index').ok, 'ok');
assert.strictEqual(require('../fixtures/packages/main').ok, 'ok');
assert.strictEqual(require('../fixtures/packages/main-index').ok, 'ok');
common.expectWarning(
'DeprecationWarning',
"Invalid 'main' field in '" +
require.resolve('../fixtures/packages/missing-main/package.json') +
"' of 'doesnotexist.js'. Please either fix that or report it to the" +
' module author',
'DEP0128');
assert.strictEqual(require('../fixtures/packages/missing-main').ok, 'ok');
assert.throws(
() => require('../fixtures/packages/missing-main-no-index'),
{