【问题标题】:Webpacking jQuery and custom files: jQuery is undefinedWebpacking jQuery 和自定义文件:jQuery 未定义
【发布时间】:2016-09-10 05:19:51
【问题描述】:

我正在使用 webpack 连接我自己的 JS 库和 JS 文件。目前的设置是这样的

var wpStream = require('webpack-stream')';
var files = ['jquery.js', 'angular.js', 'app.js', 'controller.js', 'etc.js'];

gulp.task('pack', function(){
  return gulp.src(files)
    .pipe(wpStream({
      output:{filename: 'bundle.js'}
    }).pipe(gulp.dest('dist'));
});

这很好用。我的文件已创建,它包含我的 files 数组中指定的所有内容。但是在页面加载时,我收到错误jQuery is not defined。此外,在我的控制台中,当我输入jQuery 时,没有jQuery,而是jQuery111206520785381790835。当我添加一个点来查看方法列表时,只有普通的对象方法(hasOwnPropertytoString 等)。

如何访问 jQuery? webpack 用它做了什么?

【问题讨论】:

  • 轻微错字 - 'app.js 没有结束语。不知道是不是这个原因...
  • @mark.hch 不,这是简化的。不过谢谢! +1
  • 另外你确定你的 jQuery 加载正确吗?检查你的 jQuery 路径,可能有问题..!
  • @UmairShahYousafzai 我可以在网络面板中看到它已加载。

标签: javascript jquery node.js gulp webpack


【解决方案1】:

你必须通过 webpack ProvidePlugin 使 jQuery 全局可访问

var webpack = require('webpack');
var wpStream = require('webpack-stream');
var path = require('path');
var files = ['app.js', 'controller.js', 'etc.js'];

gulp.task('pack', function () {
    return gulp.src(files)
        .pipe(wpStream(
            {
                output: {
                    filename: 'bundle.js'
                },
                plugins: [
                    new webpack.ProvidePlugin({
                        angular: "angular",
                        $: "jquery",
                        jQuery: "jquery"
                    })
                ],
                resolve: {
                    root: path.resolve('./vendor'), // directory that contains jquery.js and angular.js
                    extensions: ['', '.js']
                }
            }
        ).pipe(gulp.dest('dist'));
});

【讨论】:

  • { cache: false, output: { filename: 'bundle.js' }, module: { }, plugins:[ new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false } }), new webpack.ProvidePlugin({ $: "jquery", jQuery: "jquery" }) ], debug: false } 是我传递给wpStream 的整个配置对象。它仍然无法正常工作。有什么想法吗?
  • 另外请注意,我没有使用 npm 来包含 jQuery。我在本地文件中有它。 files 数组包含它所在的目录。
  • 您是在模块中还是在浏览器控制台中使用 $ 或 jQuery 变量? ProvidePlugin 只会在构建时在与 webpack 捆绑的模块中解析这些全局变量。 webpack.github.io/docs/…
  • 我使用jQuery,而不是$
  • 它也可能有助于根据您的文件夹结构为 jquery.js 和 angular.js 模块添加解析配置:var path = require('path'); // ... resolve: { root: path.resolve('./vendor'), extensions: ['', '.js'] } 并从数组中删除这些文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 2014-06-27
  • 2012-02-09
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多