`craco start` 不编译,`craco build` 编译

`craco start` not compiling, `craco build` does

上下文

我最近使用 craco 将我的 CRA 词典应用程序切换到 Preact。我使用 webpack 别名完成了这项工作,它用 preact 包替换了对 react 包的引用(例如 preact/compat)。

当我 运行...

时会发生什么

craco build

没有错误,构建成功完成,您可以在此处看到文件夹:

一切都很好。

craco start

它开始部署前检查(我认为),但很快就遇到了麻烦。它找不到反应模块。

$ yarn start
yarn run v1.22.17
$ craco start
craco:  *** Cannot find ESLint loader (eslint-loader). ***
E:\_Programming\js\Personal\dictionary-app\node_modules\react-scripts\scripts\start.js:19
  throw err;
  ^

Error: Cannot find module 'react'
Require stack:
- E:\_Programming\js\Personal\dictionary-app\node_modules\react-scripts\scripts\start.js
- E:\_Programming\js\Personal\dictionary-app\node_modules\@craco\craco\lib\cra.js
- E:\_Programming\js\Personal\dictionary-app\node_modules\@craco\craco\scripts\start.js
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
    at Function.resolve (node:internal/modules/cjs/helpers:108:19)
    at Object.<anonymous> (E:\_Programming\js\Personal\dictionary-app\node_modules\react-scripts\scripts\start.js:52:31)
    at Module._compile (node:internal/modules/cjs/loader:1103:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1155:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at start (E:\_Programming\js\Personal\dictionary-app\node_modules\@craco\craco\lib\cra.js:202:5) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    'E:\_Programming\js\Personal\dictionary-app\node_modules\react-scripts\scripts\start.js',
    'E:\_Programming\js\Personal\dictionary-app\node_modules\@craco\craco\lib\cra.js',
    'E:\_Programming\js\Personal\dictionary-app\node_modules\@craco\craco\scripts\start.js'
  ]
}
error Command failed with exit code 1.

现在当然不应该发生这种情况。我

  1. 在我的 tsconfig.json "skipLibCheck": true 中定义,它应该停止检查库,并且
  2. 向我的 craco.config.js 文件添加了 webpack 别名
module.exports = {
    webpack: {
        alias: {
            react: 'preact/compat',
            'react-dom/test-utils': 'preact/test-utils',
            'react-dom': 'preact/compat',
            'react/jsx-runtime': 'preact/jsx-runtime',
        },
    },
};

我不知道为什么这些别名适用于构建命令而不适用于启动命令。任何帮助将不胜感激。

代码和部署

Github repo

Vercel deployment

不幸的是,您需要保留 react 安装。 react-scripts 需要它来启动开发服务器,并且在不分叉包的情况下是不可避免的。

如果您担心与 React 一起使用的别名仍在安装中,您可以注释掉您的配置并比较构建大小。您应该会看到相当大的差异,确认您的别名按预期工作。