尝试使用webpack ignorePlugin

这是react-hot-loader DOC所说的:

  

https://www.npmjs.com/package/react-hot-loader

     

注意:您可以安全地将react-hot-loader作为常规依赖项而不是dev依赖项进行安装,因为它自动确保它不会在生产中执行并且占用空间很小。

尽管如此。我的目标是:

  • 我想从生产包中删除react-hot-loader
  • 我还想要一个App.js文件。这应该适用于DEV和PROD。

react-hot-loader相关的唯一命令是在我的App.js文件中:

App.js

import { hot } from 'react-hot-loader/root';
import React from 'react';
import Layout from './Layout/Layout';

function App() {
  console.log('Rendering App...');
  return(
    <Layout/>
  );
}

export default process.env = hot(App);

如果我像这样运行它,我将在app.js已转译和捆绑的文件中以以下行结尾:

  

/ * WEBPACK VAR注入 /(function(process){/ 和声导入 / var react_hot_loader_root__WEBPACK_IMPORTED_MODULE_0__ = webpack_require (/ !react-hot -loader / root * /“ wSuE”);

这是预期的。

但是如果我将App.js文件更改为:

AppV2.js

import { hot } from 'react-hot-loader/root';  // KEEPING THE IMPORT
import React from 'react';
import Layout from './Layout/Layout';

function App() {
  console.log('Rendering App...');
  console.log(window);
  return(
    <Layout/>
  );
}

// export default hot(App); <--- COMMENTED OUT THE hot() LINE
export default App;

然后将此行添加到我的webpack.config.js

webpack.config.js

plugins:[
  new webpack.IgnorePlugin(/react-hot-loader/)
]

最后我将得到一个新的已编译app.js文件,其内容如下:

  

***!(函数webpackMissingModule(){var e = new Error(“ Cannot find module'react-hot-loader / root'”); e.code ='MODULE_NOT_FOUND'; throw e;}()) ;

注意:上面一行中的第一个'***'字符实际上并不存在。我必须将它们添加到中!引号中显示的切除标记。不知道为什么,但是您不能以感叹号开头的报价。

问题

IgnorePlugin是否应该完全忽略react-hot-loader软件包?为什么将其标记为丢失?看到它甚至没有在代码上使用(因为我已经注释掉hot()调用)。

ilovemyf 回答:尝试使用webpack ignorePlugin

忽略插件仅在捆绑软件生成中排除该特定模块。但是,它不会从源代码中删除对该模块的引用。因此,您的webpack输出会抛出该错误。

一种绕过此错误的方法是使用DefinePluginreact-hot-loader创建一个虚拟存根。 here的更多内容。

如果react-hot-loaderNODE_ENV,则production本身可以直接代理孩子。选中herehere。因此,在生产模式下,除了直接返回您的组件的hot()函数调用之外,没有其他事情发生。

,

另一个选择可能是:

#define NGX_HTTP_UPSTREAM_FT_ERROR           0x00000002
#define NGX_HTTP_UPSTREAM_FT_TIMEOUT         0x00000004
#define NGX_HTTP_UPSTREAM_FT_INVALID_HEADER  0x00000008
#define NGX_HTTP_UPSTREAM_FT_HTTP_500        0x00000010
#define NGX_HTTP_UPSTREAM_FT_HTTP_502        0x00000020
#define NGX_HTTP_UPSTREAM_FT_HTTP_503        0x00000040
#define NGX_HTTP_UPSTREAM_FT_HTTP_504        0x00000080
#define NGX_HTTP_UPSTREAM_FT_HTTP_403        0x00000100
#define NGX_HTTP_UPSTREAM_FT_HTTP_404        0x00000200
#define NGX_HTTP_UPSTREAM_FT_HTTP_429        0x00000400
#define NGX_HTTP_UPSTREAM_FT_UPDATING        0x00000800
#define NGX_HTTP_UPSTREAM_FT_BUSY_LOCK       0x00001000
#define NGX_HTTP_UPSTREAM_FT_MAX_WAITING     0x00002000
#define NGX_HTTP_UPSTREAM_FT_NON_IDEMPOTENT  0x00004000
#define NGX_HTTP_UPSTREAM_FT_NOLIVE          0x40000000
#define NGX_HTTP_UPSTREAM_FT_OFF             0x80000000

现在,由于webpack在构建时创建捆绑包,因此它知道该模式是开发模式还是生产模式(有关build modes的更多信息),并且应该能够使用tree shaking和{{3 }}。
确保如果使用的是Babel,则不会将代码转换为CommonJS-请参见结论部分,摇树页面的第2点。

本文链接:https://www.f2er.com/3157427.html

大家都在问