在React最新项目中运行npm run test时,控制台报了个有关jest的错误。然后在查了很多方面的资料才找到问题的解决办法,记录下解决错误的过程,方便有需要的人。
报错详情
Error: Failed to initialize watch plugin "node_modules/jest-watch-typeahead/filename.js":
● Test suite failed to run
file:///C:/Users/weikengdezaoshang/Desktop/%E5%89%8D%E7%AB%AF%E7%BB%83%E4%B9%A0/sheep/sheep/node_modules/jest-watch-typeahead/build/file_name_plugin/prompt.js:4
import { PatternPrompt, printPatternCaret, printRestoredPatternCaret } from 'jest-watcher';
^^^^^^^^^^^^^
SyntaxError: The requested module 'jest-watcher' is expected to be of type CommonJS, which does not support named exports. CommonJS modules can be imported by importing the default export.
For example:
import pkg from 'jest-watcher';
const { PatternPrompt, printPatternCaret, printRestoredPatternCaret } = pkg;
at async requireOrImportModule (node_modules/jest-util/build/requireOrImportModule.js:65:32)
at async watch (node_modules/@jest/core/build/watch.js:337:34)
at async _run10000 (node_modules/@jest/core/build/cli/index.js:311:7)
at async runCLI (node_modules/@jest/core/build/cli/index.js:173:3)
看了下报错的大概意思是说我的依赖jest-watcher导入的方式不对,它还给出了一个方式就是通过import pkg from 'jest-watcher'; const { PatternPrompt, printPatternCaret, printRestoredPatternCaret } = pkg;
来解决。
但是我觉得大概率解决不了,因为这个是类库的。
解决办法
看到相关的解决办法说是因为当前jest是不支持node版本在16以下,所以是会抛出这个报错,只要升级下node版本到16以上就好了
nvn切换到16.17.0版本
先用nvm list available
看看有什么版本
d:\nodejs\nvm>nvm list available
| CURRENT | LTS | OLD STABLE | OLD UNSTABLE |
|--------------|--------------|--------------|--------------|
| 18.9.0 | 16.17.0 | 0.12.18 | 0.11.16 |
| 18.8.0 | 16.16.0 | 0.12.17 | 0.11.15 |
| 18.7.0 | 16.15.1 | 0.12.16 | 0.11.14 |
| 18.6.0 | 16.15.0 | 0.12.15 | 0.11.13 |
| 18.5.0 | 16.14.2 | 0.12.14 | 0.11.12 |
| 18.4.0 | 16.14.1 | 0.12.13 | 0.11.11 |
| 18.3.0 | 16.14.0 | 0.12.12 | 0.11.10 |
| 18.2.0 | 16.13.2 | 0.12.11 | 0.11.9 |
| 18.1.0 | 16.13.1 | 0.12.10 | 0.11.8 |
| 18.0.0 | 16.13.0 | 0.12.9 | 0.11.7 |
| 17.9.1 | 14.20.0 | 0.12.8 | 0.11.6 |
| 17.9.0 | 14.19.3 | 0.12.7 | 0.11.5 |
| 17.8.0 | 14.19.2 | 0.12.6 | 0.11.4 |
| 17.7.2 | 14.19.1 | 0.12.5 | 0.11.3 |
| 17.7.1 | 14.19.0 | 0.12.4 | 0.11.2 |
| 17.7.0 | 14.18.3 | 0.12.3 | 0.11.1 |
| 17.6.0 | 14.18.2 | 0.12.2 | 0.11.0 |
| 17.5.0 | 14.18.1 | 0.12.1 | 0.9.12 |
| 17.4.0 | 14.18.0 | 0.12.0 | 0.9.11 |
| 17.3.1 | 14.17.6 | 0.10.48 | 0.9.10 |
因为只需要node版本在16以上就好勒,所以选择相对稳定的v16.17.0
的就好了
D:\nodejs\nvm>nvm install 16.17.0
如果在安装的时候报错 Could not retrieve https://nodejs.org/dist/index.json. Get "https://nodejs.org/dist/index...
,那么就需要在安装nvm的目录下的setting.text
配置下淘宝的镜像
root: D:\nodejs\nvm
path: C:\Program Files\nodejs
node_mirror:npm.taobao.org/mirrors/node/
npm_mirror:npm.taobao.org/mirrors/npm/
这样就可以安装16.17.0的node了
安装好后,就可以直接使用nvm use
切换到相应的版本
D:\nodejs\nvm>nvm use 16.17.0
但是这时候又出现一个报错:
exit status 5: �ܾ����ʡ�
exit status 1: ���ļ��Ѵ���ʱ�����������ļ���
其实,这个的意思是说当前用户没有权限去执行这个命令,只要通过管理员模式来启动cmd就可以了
最后执行npm run test
就可以正确执行。