当前位置: 首页 > 知识库问答 >
问题:

网页包装和要求

濮阳钟展
2023-03-14

我有一个如下的模块A,模块A是使用Web包的捆绑包,它包括模块B。该模块还使用需要变量导出高图表库

A.js(在modules文件夹下::src/main/webapp/resources/js/modules)

var HighCharts = require("highchart");
var moduleB = require("../common/B.js"); //so that we can call draw() of moduleB

$(document).ready(function() {
    moduleB.print();
}

B.js(在公共文件夹下:src/main/webapp/resources/js/Common)

var print = function() {
console.log("something");
draw();
}
var chart;
function draw() {
    chart = new Highcharts.Chart({

    });
}

exports.print = print;

注意ModuleB. js捆绑在A. js中

当我加载javascript时,它向我抛出了一个错误,Highcharts是未定义的。

//如何加载这个

chart = new Highcharts.Chart({

        });

为了避免这个错误,我做了以下操作。

在B.js中,我们做了以下工作。

var Highcharts=需要(“Highcharts”);

还将B.js从common文件夹移动到modules文件夹,因为它现在是一个入口点(从src/main/webapp/resources/js/modules移动到src/main/webapp/resources/js/common)

WebPack给我以下错误。
在./src/main/webapp/资源/js/模块中找不到错误:错误:不允许对切入点的依赖@./src/main/webapp/资源/js/模块/A. js 7:14-37

网页包。配置。js

入口点将是modules文件夹下的所有文件。

var path = require('path');
var webpack = require("webpack");
var glob = require("glob");
//var BowerWebpackPlugin = require("bower-webpack-plugin");
var jsSrcPath = 'src/main/webapp/resources/js/modules/**/*.js';
var jsDestPath = 'src/main/webapp/resources/build/js/modules';
var cssPath = '';


var files = glob.sync(jsSrcPath, {});
var entries = {};


for (var i = 0; i < files.length; i++) {
  var file = files[i];
  entries[file.replace(/^.*[\\\/]/, '').replace(/\.[^/.]+$/, "")] = path.join(__dirname, file);
}

var webpackOptions = {
  cache: true,
  watch: false,
  entry: entries,
  output: {
    path: __dirname + "/" + jsDestPath,
    filename: '[name].js',
  },
  module: {
    loaders: [{
        test: /.(?:jsx|js)$/,
        exclude: /node_modules/,
        loader: 'babel-loader?blacklist=useStrict'
      },
      // }, {
      //   test: /\.json/,
      //   exclude: /node_modules/,
      //   loader: 'json-loader'
      // }, {
      //   test: /\.css$/,
      //   exclude: /node_modules/,
      //   loader: "style!css"
      // }, {
      //   test: /\.scss$/,
      //   exclude: /node_modules/,
      //   loader: 'style-loader!css-loader!sass-loader!autoprefixer-loader?browsers=last 10 version'
      // }, {
      //   test: /\.(png|jpg)$/,
      //   exclude: /node_modules/,
      //   loader: 'url-loader?limit=999999'
      // }, {
      {
        test: /vendor\/.+\.(jsx|js)$/,
        exclude: /node_modules/,
        loader: 'imports?jQuery=jquery,$=jquery,this=>window'
      }
    ]
  },
  resolve: {
    root: [path.join(__dirname, "bower_components")],
    extensions: ['', '.js', '.json', '.jsx', '.css']
  },
  plugins: [
    new webpack.ProvidePlugin({
      $: "jquery",
      jQuery: "jquery"
    }),
    // new webpack.optimize.UglifyJsPlugin({
    //   compress: {
    //     warnings: false
    //   }
    // })
  ],
  devServer: {
    contentBase: ".",
    noInfo: true, //  --no-info option
    hot: true,
    inline: true
  }
};



module.exports = webpackOptions;

PS:最初B. js在模块文件夹之外,因为它不是切入点。后来它被移动到模块文件夹内,因为我们已经将其作为切入点。

共有1个答案

弓举
2023-03-14

“显然,我不想在moduleB中加载highchairs库,因为它不是web pack的入口点。”

事实并非如此,这似乎并不直观!您确实需要在模块B中导入Highcharts,因为这就是您使用它的地方。在节点和网页包中,模块导入不是全局的;如果你有一个包含另一个图表的moduleC,你也必须在那里导入Highcharts。

Webpack足够智能,不会两次运行/包含导入的代码,因此没有理由避免这样做。我不久前写的这个答案准确地解释了它是如何工作的。

编辑:看看你的配置,我想你可能对网页包的工作方式有错误的想法。你不需要输入一个完整的文件目录,然后返回一个完整的文件目录;将单个文件设置为入口点,然后Webpack跟踪其所有依赖项,将所有内容绑定到单个输出文件*。顾名思义,入口点就是你进入应用程序的地方——你绝对不应该像现在这样将源文件夹中的每个文件都设置为入口点!

下面是一个(希望是)固定版本的配置:

var path = require('path');
var webpack = require("webpack");
var jsDestPath = 'src/main/webapp/resources/build/js/modules';
var cssPath = '';

var webpackOptions = {
  cache: true,
  watch: false,
  entry: path.join(__dirname, "src/main/webapp/resources/js/modules/a.js"),
  output: {
    path: __dirname + "/" + jsDestPath,
    filename: '[name].js',
  },
  module: {
    loaders: [{
        test: /.(?:jsx|js)$/,
        exclude: /node_modules/,
        loader: 'babel-loader?blacklist=useStrict'
      },
      // }, {
      //   test: /\.json/,
      //   exclude: /node_modules/,
      //   loader: 'json-loader'
      // }, {
      //   test: /\.css$/,
      //   exclude: /node_modules/,
      //   loader: "style!css"
      // }, {
      //   test: /\.scss$/,
      //   exclude: /node_modules/,
      //   loader: 'style-loader!css-loader!sass-loader!autoprefixer-loader?browsers=last 10 version'
      // }, {
      //   test: /\.(png|jpg)$/,
      //   exclude: /node_modules/,
      //   loader: 'url-loader?limit=999999'
      // }, {
      {
        test: /vendor\/.+\.(jsx|js)$/,
        exclude: /node_modules/,
        loader: 'imports?jQuery=jquery,$=jquery,this=>window'
      }
    ]
  },
  resolve: {
    root: [path.join(__dirname, "bower_components")],
    extensions: ['', '.js', '.json', '.jsx', '.css']
  },
  plugins: [
    new webpack.ProvidePlugin({
      $: "jquery",
      jQuery: "jquery"
    }),
    // new webpack.optimize.UglifyJsPlugin({
    //   compress: {
    //     warnings: false
    //   }
    // })
  ],
  devServer: {
    contentBase: ".",
    noInfo: true, //  --no-info option
    hot: true,
    inline: true
  }
};



module.exports = webpackOptions;

*这是一个概括——你可以有多个入口点,但它们需要独立——它们绝对不能相互导入。'

 类似资料:
  • 我在Rap应用程序中遇到了问题,因为根据视频,我是这个平台的新手http://www.youtube.com/watch?feature=endscreen 我遇到了如下错误 ! ENTRYorg.eclipse.rap.ui.workbench4 0 2013-02-06 16:36:30.640!消息框架事件错误!STACK 0org.osgi.framework.捆绑包异常:无法解决捆绑包"

  • 我一直在想如何通过React和Webpack动态添加图像。我在src/images下有一个图像文件夹,在src/components/index下有一个组件。我正在使用url加载器和以下Web包配置 在我知道的组件中,我可以在创建组件之前在文件顶部为特定图像添加require(image_path),但我希望使组件通用,并使其具有从父组件传递的图像路径的属性。 我所尝试的是: 对于实际的属性,我已

  • 主要内容:静态网页,动态网页本节我们了解一下静态网页和动态网页的相关概念。如果您熟悉前端语言的话,那么您可以快速地了解本节知识。 当我们在编写一个爬虫程序前,首先要明确待爬取的页面是静态的,还是动态的,只有确定了页面类型,才方便后续对网页进行分析和程序编写。对于不同的网页类型,编写爬虫程序时所使用的方法也不尽相同。 静态网页 静态网页是标准的 HTML 文件,通过 GET 请求方法可以直接获取,文件的扩展名是 、 等,网面中

  • 我试着从babelify、watchify、browserify转到webpack、webpack服务器和babel。 我记得6个月前,我离开了webpack,因为它让我在尝试使用aws sdk时遇到了类似的问题。 出于某种原因,每次构建时都会出现以下错误: 哈希: 396f0bfb9d565b6f60f0版本: webpack 1.14.0时间: 61ms[0]。/src/index.js0字节

  • 我有一个用Typescript编写的项目,我希望能够调试它(无论是在中还是在中)。 起初,我看到Typescript的导入功能不受支持。所以我试着使用和但是完全失败了。即使我的应用程序正在工作(由于有一个包含所有代码的文件),它也无法将代码与给定的源代码映射匹配,这使得调试变得不可能。 停止使用webpack后,我尝试添加作为解决错误。这很管用,但现在我又被困住了,我明白了: 未捕获引用错误:未定

  • 我试图安装Webpack与。 使用较旧的不推荐使用的Vue Cli,运行命令将构建一个支持webpack的项目,该项目包含babel、SASS、Linting、Router和vuex等选项,这些选项都包含在一个项目中。然而,这些软件包似乎很旧,现在已经不推荐使用了。 vue cli的新版本没有该网页包。配置文件。我想将预渲染添加到我的项目中,但不知道在哪里添加它。它会进入vue吗。配置。js文件?