Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

子项目为create-react-app,修改任意后,主项目报错 #340

Open
bestRenekton opened this issue Mar 26, 2020 · 19 comments · Fixed by #367
Open

子项目为create-react-app,修改任意后,主项目报错 #340

bestRenekton opened this issue Mar 26, 2020 · 19 comments · Fixed by #367
Assignees
Labels
help wanted Extra attention is needed

Comments

@bestRenekton
Copy link

What happens?

官方例子,修改react16即create-react-app项目后,主项目报错You need to export the functional lifecycles in react16 entry

Mini Showcase Repository(REQUIRED)

https://github.com/umijs/qiankun/tree/master/examples

How To Reproduce

Steps to reproduce the behavior: 1. 2.

Expected behavior 1. 2.

Context

  • qiankun Version:
  • Platform Version:
  • Browser Version:
@kuitos
Copy link
Member

kuitos commented Mar 26, 2020

改了什么提供一下啊..

@bestRenekton
Copy link
Author

改了什么提供一下啊..

比如我改了react16 app.js里面的文字

@kuitos
Copy link
Member

kuitos commented Mar 26, 2020

热加载应该是关掉了吧 @Deturium 看下

@Deturium
Copy link
Contributor

config-overrides.jsdevServerhot 确实标记为 false 了,但热重载还是生效了

可能是 react-app-rewired 的问题,换成 rescripts 应该能解决问题

@bestRenekton
Copy link
Author

config-overrides.jsdevServerhot 确实标记为 false 了,但热重载还是生效了

可能是 react-app-rewired 的问题,换成 rescripts 应该能解决问题

试了,把react-app-rewired 换成react-scriptsconfig-overrides.js的配置搬过去,还是不行,一样的错误

@kuitos
Copy link
Member

kuitos commented Apr 21, 2020

ping @Deturium

@Pingan2018
Copy link

我没事使用react-scripts,直接把config文件eject出来,然后把配置改成和react-scripts一样,可还是不行

@Pingan2018
Copy link

ping @Deturium

大佬能看下我的问题么?我没有使用react-scripts,而是直接把config文件eject出来,然后把配置改成和react-scripts一样,可还是不行

@Deturium
Copy link
Contributor

Deturium commented Apr 21, 2020

这个问题还确实比较头疼。。

主要 CRA 脚手架里面,除了 HMR 的热重载之外,自己还另起了一个 live reload,而这个在非 eject 下是没有办法禁止

大佬能看下我的问题么?我没有使用 react-scripts,而是直接把 config 文件 eject 出来,然后把配置改成和react-scripts一样,可还是不行

你这里既然 eject 了那想办法把 live reload 也关了就行

@haoliangwu
Copy link

haoliangwu commented Apr 26, 2020

使用 rescripts 或者 react-scripts-rewired 或者 eject 后把所有 hot reload 相关配置消除就可以了,我这里用用的是 react-scripts-rewired, 亲测可行:

module.exports = {
  webpack: (config) => {
    config.entry = config.entry.filter(
      (e) => !e.includes('webpackHotDevClient')
    );

    config.output.library = `${name}-[name]`;
    config.output.libraryTarget = 'umd';
    config.output.jsonpFunction = `webpackJsonp_${name}`;
    config.output.globalObject = 'window';

    config.plugins = config.plugins.filter(
      (p) => !(p instanceof webpack.HotModuleReplacementPlugin)
    );

    return config;
  },

  devServer: (config) => {
    config.port = process.env.PORT || 7101;
    config.headers = {
      'Access-Control-Allow-Origin': '*',
    };

    config.historyApiFallback = true;

    config.hot = false;
    config.watchContentBase = false;
    config.liveReload = false;

    return config;
  },
};

@kuitos
Copy link
Member

kuitos commented Apr 27, 2020

使用 rescripts 或者 react-scripts-rewired 或者 eject 后把所有 hot reload 相关配置消除就可以了,我这里用用的是 react-scripts-rewired, 亲测可行:

module.exports = {
  webpack: (config) => {
    config.entry = config.entry.filter(
      (e) => !e.includes('webpackHotDevClient')
    );

    config.output.library = `${name}-[name]`;
    config.output.libraryTarget = 'umd';
    config.output.jsonpFunction = `webpackJsonp_${name}`;
    config.output.globalObject = 'window';

    config.plugins = config.plugins.filter(
      (p) => !(p instanceof webpack.HotModuleReplacementPlugin)
    );

    return config;
  },

  devServer: (config) => {
    config.port = process.env.PORT || 7101;
    config.headers = {
      'Access-Control-Allow-Origin': '*',
    };

    config.historyApiFallback = true;

    config.hot = false;
    config.watchContentBase = false;
    config.liveReload = false;

    return config;
  },
};

@Deturium

@weixiaoxi
Copy link

使用 rescripts 或者 react-scripts-rewired 或者 eject 后把所有 hot reload 相关配置消除就可以了,我这里用用的是 react-scripts-rewired, 亲测可行:

module.exports = {
  webpack: (config) => {
    config.entry = config.entry.filter(
      (e) => !e.includes('webpackHotDevClient')
    );

    config.output.library = `${name}-[name]`;
    config.output.libraryTarget = 'umd';
    config.output.jsonpFunction = `webpackJsonp_${name}`;
    config.output.globalObject = 'window';

    config.plugins = config.plugins.filter(
      (p) => !(p instanceof webpack.HotModuleReplacementPlugin)
    );

    return config;
  },

  devServer: (config) => {
    config.port = process.env.PORT || 7101;
    config.headers = {
      'Access-Control-Allow-Origin': '*',
    };

    config.historyApiFallback = true;

    config.hot = false;
    config.watchContentBase = false;
    config.liveReload = false;

    return config;
  },
};

config.entry.filter is not a function

@Elk-song
Copy link

使用 rescripts 或者 react-scripts-rewired 或者 eject 后把所有 hot reload 相关配置消除就可以了,我这里用用的是 react-scripts-rewired, 亲测可行:

module.exports = {
  webpack: (config) => {
    config.entry = config.entry.filter(
      (e) => !e.includes('webpackHotDevClient')
    );

    config.output.library = `${name}-[name]`;
    config.output.libraryTarget = 'umd';
    config.output.jsonpFunction = `webpackJsonp_${name}`;
    config.output.globalObject = 'window';

    config.plugins = config.plugins.filter(
      (p) => !(p instanceof webpack.HotModuleReplacementPlugin)
    );

    return config;
  },

  devServer: (config) => {
    config.port = process.env.PORT || 7101;
    config.headers = {
      'Access-Control-Allow-Origin': '*',
    };

    config.historyApiFallback = true;

    config.hot = false;
    config.watchContentBase = false;
    config.liveReload = false;

    return config;
  },
};

config.entry.filter is not a function

我也遇到了这个问题,请问你解决了么?

@rubenfranca
Copy link

Has anyone figured out how to fix this?

@jingping-ye
Copy link

使用 rescripts 或者 react-scripts-rewired 或者 eject 后把所有 hot reload 相关配置消除就可以了,我这里用用的是 react-scripts-rewired, 亲测可行:

module.exports = {
  webpack: (config) => {
    config.entry = config.entry.filter(
      (e) => !e.includes('webpackHotDevClient')
    );

    config.output.library = `${name}-[name]`;
    config.output.libraryTarget = 'umd';
    config.output.jsonpFunction = `webpackJsonp_${name}`;
    config.output.globalObject = 'window';

    config.plugins = config.plugins.filter(
      (p) => !(p instanceof webpack.HotModuleReplacementPlugin)
    );

    return config;
  },

  devServer: (config) => {
    config.port = process.env.PORT || 7101;
    config.headers = {
      'Access-Control-Allow-Origin': '*',
    };

    config.historyApiFallback = true;

    config.hot = false;
    config.watchContentBase = false;
    config.liveReload = false;

    return config;
  },
};

config.entry.filter is not a function

我也遇到了这个问题,请问你解决了么?

CRA 4.0.0.不能这样写,改一改,如下:

const { name } = require("./package.json");
const ReactRefreshPlugin = require("@pmmmwh/react-refresh-webpack-plugin");
const webpack = require("webpack");

module.exports = {
  webpack: function override(config, env) {
    config.output.library = `${name}-[name]`;
    config.output.libraryTarget = "umd";
    config.output.jsonpFunction = `webpackJsonp_${name}`;

    // Remove 'react-refresh' from the loaders.
    for (const rule of config.module.rules) {
      if (!rule.oneOf) continue;

      for (const one of rule.oneOf) {
        if (one.loader && one.loader.includes("babel-loader") && one.options && one.options.plugins) {
          one.options.plugins = one.options.plugins.filter(
            (plugin) => typeof plugin !== "string" || !plugin.includes("react-refresh")
          );
        }
      }
    }

    config.plugins = config.plugins.filter(
      (plugin) => !(plugin instanceof webpack.HotModuleReplacementPlugin) && !(plugin instanceof ReactRefreshPlugin)
    );

    return config;
  },
  devServer: (configFunction) => {
    return function (proxy, allowedHost) {
      const config = configFunction(proxy, allowedHost);
      config.open = false;
      config.hot = false;
      config.headers = {
        "Access-Control-Allow-Origin": "*",
      };
      return config;
    };
  },
};

参考:https://gist.github.com/int128/e0cdec598c5b3db728ff35758abdbafd#gistcomment-3516287

@ruoruoji
Copy link

ruoruoji commented Feb 2, 2021

image
image
so, "start": "cross-env PORT=9090 WDS_SOCKET_PORT=9090 这样就不会了

@ruoruoji
Copy link

ruoruoji commented Feb 11, 2021

Has anyone figured out how to fix this?

This article will help you https://juejin.cn/post/6927972972640600078/

@yulintianxia
Copy link

把端口写进去也不行,感觉应该是版本的问题,我的vue 3.0+ts是最新的版本,react 项目使用的creat-react-app + ts官方脚手架,最新版本17,安装最新的react-app-rewired 可能最新版本改动,按照const { name } = require("./package.json");
const ReactRefreshPlugin = require("@pmmmwh/react-refresh-webpack-plugin");
const webpack = require("webpack");

module.exports = {
webpack: function override(config, env) {
config.output.library = ${name}-[name];
config.output.libraryTarget = "umd";
config.output.jsonpFunction = webpackJsonp_${name};

// Remove 'react-refresh' from the loaders.
for (const rule of config.module.rules) {
  if (!rule.oneOf) continue;

  for (const one of rule.oneOf) {
    if (one.loader && one.loader.includes("babel-loader") && one.options && one.options.plugins) {
      one.options.plugins = one.options.plugins.filter(
        (plugin) => typeof plugin !== "string" || !plugin.includes("react-refresh")
      );
    }
  }
}

config.plugins = config.plugins.filter(
  (plugin) => !(plugin instanceof webpack.HotModuleReplacementPlugin) && !(plugin instanceof ReactRefreshPlugin)
);

return config;

},
devServer: (configFunction) => {
return function (proxy, allowedHost) {
const config = configFunction(proxy, allowedHost);
config.open = false;
config.hot = false;
config.headers = {
"Access-Control-Allow-Origin": "*",
};
return config;
};
},
}; 这个写法就Ok了

@Bonnie8ni
Copy link

@kuitos @Deturium

你好,我遇到一個狀況是主應用隨意修改任何東西,儲存後,(主+子)頁面會整個黑掉,並且跳出以下這個錯誤訊息
iShot_2023-11-01_14 40 06

找了一年多的相關詞彙都找不到解決方式,每次一更新主應用就掛掉一次,要自己手動整理
後來幾乎都不主子應用一起開啟了,想請求協助。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

Successfully merging a pull request may close this issue.