为什么使用 create-react-app 后,npm start 无法运行?

16

我使用create-react-app创建了一个样例react应用,但是npm start失败了。

我尝试过使用node 11.4和10.4(npm 6.4.1)。

npm install create-react-app -g
create-react-app t2
cd t2
npm start

期望

能够启动简单的React服务器,并在浏览器上通过localhost:3000进行访问。

实际情况

服务器未能启动,我在终端中看到了以下信息:

$ npm start

> t2@0.1.0 start /Users/samr/dev/githubs/react/t2
> react-scripts start

/Users/samr/dev/githubs/react/t2/node_modules/ajv/lib/keyword.js:65
      throw new Error('custom keyword definition is invalid: '  + this.errorsText(validateDefinition.errors));
      ^

Error: custom keyword definition is invalid: data.errors should be boolean
    at Ajv.addKeyword (/Users/samr/dev/githubs/react/t2/node_modules/ajv/lib/keyword.js:65:13)
    at module.exports (/Users/samr/dev/githubs/react/t2/node_modules/ajv-errors/index.js:10:7)
    at Object.<anonymous> (/Users/samr/dev/githubs/react/t2/node_modules/schema-utils/src/validateOptions.js:22:1)
    at Module._compile (internal/modules/cjs/loader.js:723:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:734:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
    at Module.require (internal/modules/cjs/loader.js:659:17)
    at require (internal/modules/cjs/helpers.js:22:18)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! t2@0.1.0 start: `react-scripts start`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the t2@0.1.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/samr/.npm/_logs/2019-02-09T23_19_40_848Z-debug.log

看起来是一个已知问题:https://github.com/webpack/webpack/issues/8768 - Lambda Fairy
我也遇到了这个问题。昨晚我创建的一个应用程序,npm start 运行得很好,但今天我尝试使用 create-react-app 创建一个新项目,在新项目中 npm start 对我来说不起作用。从我的上一个应用程序复制 node_modules 文件夹确实有助于解决临时问题,但是一旦我尝试将 react router 安装到我的新应用程序中,然后运行 npm start,我又遇到了这个错误。 - cathamatic
同样的问题,也许你可以查看这个链接 https://github.com/webpack/webpack/issues/8768,根据某人在这里的建议更改文件 node_modules\ajv-errors\index.js,作为一个快速解决方法。 - PepitoPompin
5个回答

11

正如 @atsnam 所说,您可以在此处找到解决方案 https://github.com/webpack/webpack/issues/8768

如果您使用 yarn

将以下内容添加到 package.json 文件中

"resolutions": {
  "ajv": "6.8.1"
}

然后运行yarn install

如果你使用npm

npm uninstall ajv
npm install ajv@6.8.1

那对我有用


如果您部署该应用程序,它将无法正常工作。我建议将 "ajv": "6.8.1" 添加到依赖项中。 - jsnewbie
只需修改为 npm install --save ajv@6.8.1 - aquilesb
如果您使用的是npm 5或更高版本,则所有安装默认情况下都应保存到package.json - Lambda Fairy
我在GitHub上下载了一个TomTom ReactJS示例,遇到了同样的问题。这个答案解决了我的问题。 - Dan7el

9

这里提到了快速解决方案:

简单来说,进入node_modules/ajv/lib/keyword.js文件并注释掉第64和65行即可。


2
我的 node_modules 目录中没有 ajv 文件夹。 - Abel Agoi

1

只需像这样在你的 package.json 中添加 resolutions

  { 
    "dependencies": {
      ...
    }
    "resolutions": {
      "ajv": "6.8.1"
    }
  }

然后运行 npm install。如果你使用 yarn,则运行 yarn install


我添加了这个,执行了npm install,但是npm start仍然以相同的方式失败。 - javazen

0

接受的答案对我没用。相反,我做了以下这些操作:

  • 删除了 node_modules 文件夹。
  • 切换到项目父目录。

    运行 npm install 和 npm start 命令。

这个方法非常有效。


0
根据Github答案中的建议,以下更改使我能够工作。
To fix this error, just change:
Line 14: `errors: 'full',`
to:
Line 14: `errors: true`
in file **node_modules\ajv-errors\index.js**

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接