Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webpack 使用新dependOn语法的网页条目和问题_Webpack - Fatal编程技术网

Webpack 使用新dependOn语法的网页条目和问题

Webpack 使用新dependOn语法的网页条目和问题,webpack,Webpack,我在我的web应用程序中使用webpack v5.0.0 beta版,在使用入门部分中新的dependOn选项时遇到了一些问题 我有两个应用程序,在单独的回购协议中,我将它们组合到我的web应用程序中。为简单起见,我将它们称为appA和appB 每个应用都有自己的repo和自己的webpack配置。我绑定appB,并将这些绑定文件作为appA的依赖项导入 问题在于,由于appB有多个条目,因此捆绑包文件中存在大量重复代码。我开始使用新的dependOn语法,这似乎是一个很好的修复方法,但现在当我

我在我的web应用程序中使用webpack v5.0.0 beta版,在使用入门部分中新的
dependOn
选项时遇到了一些问题

我有两个应用程序,在单独的回购协议中,我将它们组合到我的web应用程序中。为简单起见,我将它们称为appAappB

每个应用都有自己的repo和自己的webpack配置。我绑定appB,并将这些绑定文件作为appA的依赖项导入

问题在于,由于appB有多个条目,因此捆绑包文件中存在大量重复代码。我开始使用新的dependOn语法,这似乎是一个很好的修复方法,但现在当我尝试在appA中导入appB时,我得到以下错误:

Uncaught(in promise)类型错误:loadAppB不是构造函数

调试时,在开发工具中,变量
loadAppB
以某种方式分配给整数
1

以下是我如何将appB作为appA中的依赖项加载:

import( /* webpackChunkName: "AppB" */ "../lib/appB" ).then( module => {
    const loadAppB = module.default;
    window.appB = new loadAppB();
const path = require("path");
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

module.exports = {
  entry: {
    AppB: { import: "./src/AppB.js", dependOn: "Class"},
    Class: "./src/Class.js",
    Subclass: { import: "./src/Subclass.js", dependOn: "Class" },
  },

  output: {
    filename: "[name].js",
    path: path.resolve(__dirname, "build"),
    libraryTarget: 'commonjs2'
  },

  mode: "production",

  optimization: {
    minimize: false,
  },

  plugins: [
    new CleanWebpackPlugin(),
  ],
};
以下是appB的网页配置:

import( /* webpackChunkName: "AppB" */ "../lib/appB" ).then( module => {
    const loadAppB = module.default;
    window.appB = new loadAppB();
const path = require("path");
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

module.exports = {
  entry: {
    AppB: { import: "./src/AppB.js", dependOn: "Class"},
    Class: "./src/Class.js",
    Subclass: { import: "./src/Subclass.js", dependOn: "Class" },
  },

  output: {
    filename: "[name].js",
    path: path.resolve(__dirname, "build"),
    libraryTarget: 'commonjs2'
  },

  mode: "production",

  optimization: {
    minimize: false,
  },

  plugins: [
    new CleanWebpackPlugin(),
  ],
};
有趣的是,如果我将appB的webpack配置中的条目修改为:

entry: {
    AppB: "./src/AppB.js",
    Class: "./src/Class.js",
    Subclass: { import: "./src/Subclass.js", dependOn: "Class" },
  },
而不是这个(原件):

通过删除appB条目中的
dependOn
选项,我能够成功地在appA内部加载appB

即使这样做有效,appB条目文件使用
导出,因此
文件的代码是重复的(它出现在appB捆绑包以及它自己的输出捆绑包中)

有没有人遇到过类似的事情,或者知道为什么会发生这种情况

我还将包括appA的webpack配置,以防万一

const path = require('path');
const webpack = require('webpack');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');

module.exports = {
  entry: {
    app: "./js/app.js"
  },

  output: {
    filename: "[name].bundle.js",
    chunkFilename: "[name].bundle.js",
    publicPath: 'build/',
    path: path.resolve(__dirname, "build"),
  },

  optimization: {
    minimize: false,
    concatenateModules: false,
  },

  mode: "production",
  plugins: [
    new CleanWebpackPlugin(),
    new webpack.SourceMapDevToolPlugin()
  ],

  module: {
    rules: [
      {
        test: require.resolve('jquery'),
        use: [{
          loader: 'expose-loader',
          options: 'jQuery'
        },{
          loader: 'expose-loader',
          options: '$'
        }]
      }
    ]
  },
};