npm 运行 覆盖失败 "require(...).internalModuleStat is not a function"
npm run coverage fails with "require(...).internalModuleStat is not a function"
当我们 运行 使用 npm run test
进行测试时,它们通过了。但是,当我们 运行 和 npm run coverage
时,有些失败并出现此错误:
'internal/modules/cjs/loader.js:58\n' +
"const internalModuleStat = function (f) { return require('fs').internalModuleStat(f); };\n" +
' ^\n' +
'\n' +
'TypeError: require(...).internalModuleStat is not a function\n' +
' at internalModuleStat (internal/modules/cjs/loader.js:58:64)\n' +
' at stat (internal/modules/cjs/loader.js:137:18)\n' +
' at Function.Module._findPath (internal/modules/cjs/loader.js:667:16)\n' +
' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:967:27)\n' +
' at Function.Module._load (internal/modules/cjs/loader.js:862:27)\n' +
' at Module.require (internal/modules/cjs/loader.js:1042:19)\n' +
' at Module._preloadModules (internal/modules/cjs/loader.js:1296:12)\n' +
' at loadPreloadModules (internal/bootstrap/pre_execution.js:449:5)\n' +
' at prepareMainThreadExecution (internal/bootstrap/pre_execution.js:73:3)\n' +
' at internal/bootstrap/pkg.js:7:1\n'
这里发生了什么?
许多设置中都可能出现此错误消息;很难发现您的情况。在这里,我们分享了一个针对我们自己的上下文的解决方案,并解释了为什么它对我们有用,可能对你有用。
类似问题有一个共同的(虽然不是唯一的)根本原因:
Something may be messing up with the values of the NODE_OPTIONS
variable.
要了解它的含义,请查看发生在我们身上的事情。
案例研究
我们也使用的 nyc
(the test coverage tool we use) sets an environment variable called NODE_OPTIONS
. However, pkg
也取决于此变量。因此,当我们 运行 覆盖时,变量被 nyc
更改,并且 pkg
以某种方式丢失。
我们的解决方案是在 运行测试之前重置变量。在我们的例子中,我们使用 Mocha,所以我们在 package.json
:
中有这样一行
"scripts": {
"coverage": "nyc --reporter=lcov --include='src/**/*.js' npm test",
"test": "./node_modules/.bin/mocha --require @babel/register --recursive --exit",
}
我们刚刚在调用 mocha
之前添加了 NODE_OPTIONS=''
:
"scripts": {
"coverage": "nyc --reporter=lcov --include='src/**/*.js' npm test",
"test": "NODE_OPTIONS='' ./node_modules/.bin/mocha --require @babel/register --recursive --exit",
}
现在,npm run coverage
运行s nyc
,根据需要设置变量。 nyc
然后调用 npm run test
,其脚本清理变量。
您的里程可能会有所不同,但可能接近
您遇到的问题不太可能与我们遇到的问题完全相同。然而,您可能以其他方式更改了 NODE_OPTIONS
。问题可能是其他原因,但我确实会检查 NODE_OPTIONS
是否可能是罪魁祸首。
当我们 运行 使用 npm run test
进行测试时,它们通过了。但是,当我们 运行 和 npm run coverage
时,有些失败并出现此错误:
'internal/modules/cjs/loader.js:58\n' +
"const internalModuleStat = function (f) { return require('fs').internalModuleStat(f); };\n" +
' ^\n' +
'\n' +
'TypeError: require(...).internalModuleStat is not a function\n' +
' at internalModuleStat (internal/modules/cjs/loader.js:58:64)\n' +
' at stat (internal/modules/cjs/loader.js:137:18)\n' +
' at Function.Module._findPath (internal/modules/cjs/loader.js:667:16)\n' +
' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:967:27)\n' +
' at Function.Module._load (internal/modules/cjs/loader.js:862:27)\n' +
' at Module.require (internal/modules/cjs/loader.js:1042:19)\n' +
' at Module._preloadModules (internal/modules/cjs/loader.js:1296:12)\n' +
' at loadPreloadModules (internal/bootstrap/pre_execution.js:449:5)\n' +
' at prepareMainThreadExecution (internal/bootstrap/pre_execution.js:73:3)\n' +
' at internal/bootstrap/pkg.js:7:1\n'
这里发生了什么?
许多设置中都可能出现此错误消息;很难发现您的情况。在这里,我们分享了一个针对我们自己的上下文的解决方案,并解释了为什么它对我们有用,可能对你有用。
类似问题有一个共同的(虽然不是唯一的)根本原因:
Something may be messing up with the values of the
NODE_OPTIONS
variable.
要了解它的含义,请查看发生在我们身上的事情。
案例研究
我们也使用的nyc
(the test coverage tool we use) sets an environment variable called NODE_OPTIONS
. However, pkg
也取决于此变量。因此,当我们 运行 覆盖时,变量被 nyc
更改,并且 pkg
以某种方式丢失。
我们的解决方案是在 运行测试之前重置变量。在我们的例子中,我们使用 Mocha,所以我们在 package.json
:
"scripts": {
"coverage": "nyc --reporter=lcov --include='src/**/*.js' npm test",
"test": "./node_modules/.bin/mocha --require @babel/register --recursive --exit",
}
我们刚刚在调用 mocha
之前添加了 NODE_OPTIONS=''
:
"scripts": {
"coverage": "nyc --reporter=lcov --include='src/**/*.js' npm test",
"test": "NODE_OPTIONS='' ./node_modules/.bin/mocha --require @babel/register --recursive --exit",
}
现在,npm run coverage
运行s nyc
,根据需要设置变量。 nyc
然后调用 npm run test
,其脚本清理变量。
您的里程可能会有所不同,但可能接近
您遇到的问题不太可能与我们遇到的问题完全相同。然而,您可能以其他方式更改了 NODE_OPTIONS
。问题可能是其他原因,但我确实会检查 NODE_OPTIONS
是否可能是罪魁祸首。