diff --git a/packages/pnpmfile/package.json b/packages/pnpmfile/package.json index 98c4867da6..660824fc85 100644 --- a/packages/pnpmfile/package.json +++ b/packages/pnpmfile/package.json @@ -13,7 +13,7 @@ "scripts": { "lint": "tslint -c ../../tslint.json src/**/*.ts test/**/*.ts", "tsc": "rimraf lib && tsc", - "test": "pnpm run tsc", + "test": "pnpm run tsc && ts-node test --type-check", "prepublishOnly": "pnpm run tsc" }, "repository": "https://github.com/pnpm/pnpm/blob/master/packages/pnpmfile", diff --git a/packages/pnpmfile/src/requirePnpmfile.ts b/packages/pnpmfile/src/requirePnpmfile.ts index 654bf6d8d1..a406b6e1f2 100644 --- a/packages/pnpmfile/src/requirePnpmfile.ts +++ b/packages/pnpmfile/src/requirePnpmfile.ts @@ -31,6 +31,13 @@ export default (pnpmFilePath: string, prefix: string) => { message: `Using hooks from: ${pnpmFilePath}`, prefix, }) + if (typeof pnpmfile === 'undefined') { + logger.warn({ + message: `Ignoring the pnpmfile at "${pnpmFilePath}". It exports "undefined".`, + prefix, + }) + return undefined + } if (pnpmfile?.hooks?.readPackage && typeof pnpmfile.hooks.readPackage !== 'function') { throw new TypeError('hooks.readPackage should be a function') } diff --git a/packages/pnpmfile/test/index.ts b/packages/pnpmfile/test/index.ts new file mode 100644 index 0000000000..e81f766a72 --- /dev/null +++ b/packages/pnpmfile/test/index.ts @@ -0,0 +1,9 @@ +import { requirePnpmfile } from '@pnpm/pnpmfile' +import path = require('path') +import test = require('tape') + +test('ignoring a pnpmfile that exports undefined', (t) => { + const pnpmfile = requirePnpmfile(path.join(__dirname, 'pnpmfiles/undefined.js'), __dirname) + t.equal(typeof pnpmfile, 'undefined') + t.end() +}) diff --git a/packages/pnpmfile/test/pnpmfiles/undefined.js b/packages/pnpmfile/test/pnpmfiles/undefined.js new file mode 100644 index 0000000000..c5f2ccf114 --- /dev/null +++ b/packages/pnpmfile/test/pnpmfiles/undefined.js @@ -0,0 +1 @@ +module.exports = undefined