[问题解决]关于React npm run test错误jest-watcher和nvm切换node版本方法

384 阅读2分钟

在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 配置下淘宝的镜像

image.png

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 就可以正确执行。