简体   繁体   English

Webpack 从 v4 迁移到 v5,expose-loader 抛出错误

[英]Webpack migration from v4 to v5, expose-loader throwing error

Trying to update webpack from version 4.44.2 to the latest version 5.58.2 and I suppose there are breaking changes.尝试将 webpack 从版本 4.44.2 更新到最新版本 5.58.2,我想有重大变化。 The expose-loader is setup and it is throwing an error.暴露加载器已设置,但抛出错误。

Here is a snippet of the package.json file这是 package.json 文件的一个片段

    "expose-loader": "^3.0.0",
    "file-loader": "^6.2.0",
    "node-sass": "^4.14.1",
    "oidc-client": "^1.11.5",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-router": "^5.2.1",
    "react-router-bootstrap": "^0.25.0",
    "react-router-dom": "^5.3.0",
    "react-scripts": "^4.0.3",
    "typescript": "^3.9.10",
    "url-loader": "^4.1.1",
    "webpack": "^5.58.2",
    "webpack-cli": "^4.9.1",

Here is the setup for webpack.config.js file这是 webpack.config.js 文件的设置

module.exports = env => ({
  watch: !env.production,
  mode: env.production ? "production" : "development",
  entry: {
    style: "./styles/style.scss",
    client: [
      "./ts/client-polyfills.ts",
      "expose-loader?React!react",
      "expose-loader?ReactDOM!react-dom",
      "expose-loader?Components!./components"
    ],
    server: [
      "./ts/server-polyfills.ts",
      "expose-loader?React!react",
      "expose-loader?ReactDOM!react-dom",
      "expose-loader?ReactDOMServer!react-dom/server",
      "expose-loader?Components!./components"
    ]
  },

And here is another way of setting up expose-loader that I have tried...这是我尝试过的另一种设置公开加载程序的方法......

module: {
    rules: [
      {
        test: require.resolve('react'),
        use: {
          loader: 'expose-loader',
          options: 'React'
        }
      },
      {
        test: require.resolve('react-dom'),
        use: {
          loader: 'expose-loader',
          options: 'ReactDOM'
        }
      },
      {
        test: require('.\/components'),
        use: {
          loader: 'expose-loader',
          options: 'Components'
        }
      },
      {
        enforce: "pre",
        test: /\.scss$/,
        exclude: /node_modules/,
        use: "import-glob"
      },
      {
        test: /\.s[ac]ss$/i,
        exclude: /node_modules/,
        use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"]
      },
      {
        test: /\.ts(x?)$/,
        exclude: /node_modules/,
        use: [{ loader: "ts-loader" }]
      },
      {
        test: /\.(svg|png|jpg|woff2?|ttf|eot)$/,
        enforce: "pre",
        use: {
          loader: "file-loader",
          options: {
            expose:{
            globalName : "[name].[hash].[ext]",
            moduleLocalName:"ext",
            override:true
            }
          }
        }
      }
    ]
  },

The error I am getting is我得到的错误是

ERROR in ./node_modules/react-dom/server.browser.js (./node_modules/expose-loader/dist/cjs.js?exposes=ReactDOMServer!./node_modules/react-dom/server.browser.js)
Module build failed (from ./node_modules/expose-loader/dist/cjs.js):
TypeError: this.getOptions is not a function
at Object.loader (C:\**\ClientApp\node_modules\expose-loader\dist\index.js:19:24)
@ ./components (multi ./ts/server-polyfills.ts expose-loader?exposes=React!react expose-loader?exposes=ReactDOM!react-dom expose-loader?exposes=ReactDOMServer!react-dom/server (webpack)-inject-plugin/dist/webpack-inject-plugin.loader?id=webpack-inject-module-1 (webpack)-inject-plugin/dist/webpack-inject-plugin.loader?id=webpack-inject-module-2 expose-loader?exposes=Components!./components) server[3]

Here is how we could finally get this to work: (by using exposes= keyword)下面是我们如何最终让它工作:(通过使用暴露=关键字)

client: [
    "./ts/client-polyfills.ts",
    "expose-loader?exposes=React!react",
    "expose-loader?exposes=ReactDOM!react-dom",
    "expose-loader?exposes=Components!./components"
 ],
server: [
   "./ts/server-polyfills.ts",
   "expose-loader?exposes=React!react",
   "expose-loader?exposes=ReactDOM!react-dom",
   "expose-loader?exposes=ReactDOMServer!react-dom/server",
   "expose-loader?exposes=Components!./components"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 将 webpack 从 v4 更新到 v5 后无法解析项目依赖项中的 polyfill 包 - Can't resolve polyfill packages in project dependencies after updating webpack from v4 to v5 Webpack:在不使用ProvidePlugin和暴露加载程序的情况下公开全局变量 - Webpack: Exposing global variable without using ProvidePlugin and expose-loader 组件从v5或v4降级到angularJS时的角度注入器错误 - Angular injector error on component downgrading from v5 or v4 to angularJS 将 StackNavigator 从 v4 转换为 v5 React Native 错误以进行身份​​验证 - Converting StackNavigator from v4 to v5 React Native error for auth Gatsby 站点的 Webpack v5 polyfill 错误 - Webpack v5 polyfill error with Gatsby site 从v3迁移到v4-d3中未显示工具提示 - migration from v3 to v4 - tooltip not showing in d3 从 mui v4 迁移到 v5 | TypeError:无法读取未定义的属性(读取“keyboardDate”) - Migrating from mui v4 to v5 | TypeError: Cannot read properties of undefined (reading 'keyboardDate') MUI:从material v4升级到v5后,提供的`styles`参数无效 - MUI: The `styles` argument provided is invalid after upgrading from material v4 to v5 如何将 styles 从材质图标 ui v4 传递到 v5 保持相同的 styles? - How to pass styles from material icons ui v4 to v5 maintaining the same styles? 暴露加载器不会暴露对暴露对象的修改 - expose-loader doesn't expose modifications to exposed object
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM