ReferenceError:在Webpack中使用ExtractTextPlugin时未定义窗口

时间:2015-11-11 19:31:31

标签: javascript css node.js less webpack

我正在使用Webpack使用ExtractTextPlugin插件构建我们的项目,以将CSS分成单独的文件。它适用于项目中的大多数CSS / LESS / SASS文件,除了一个属于第三方库的vendor.css文件。只要我将此文件包含到我的项目中,我就会收到 ReferenceError:window is not defined 错误消息。如果我不使用ExtractTextPlugin,则不会显示错误消息。

我的 webpack.config.js 部分LESS配置如下(完整文件为here):

new ExtractTextPlugin(__dirname + '/Content/js/styles/styles.css'),
...
module: {
  {
    test: /\.less$/,
    loader: ExtractTextPlugin.extract(
      'style-loader',
      'css-loader!' +
      'autoprefixer-loader!' +
      'less-loader'
    )
  }
}

完整错误消息输出为here

以下是我导入此特定LESS文件的工作流程: 需要 styles.js 文件,该文件需要 vendor.less 文件,该文件需要来自Bower目录中第三方库的CSS。

styles.js

require('../../../less/vendor.less');

vendor.less

@import (css) "~vendor-ui-bootstrap/dist/css/arena.css";

arena.css 包含已编译的CSS。

2 个答案:

答案 0 :(得分:1)

我能够解决这个问题。问题出在webpack.config.js文件中我在alias部分中有'jquery'引用:

<强> webpack.config.js

new webpack.ProvidePlugin({
    '_': 'underscore',
    $: 'jquery',
    jQuery: 'jquery',
    'window.jQuery': 'jquery'
}),
...
alias: {
  //'jquery': 'jquery/jquery', - no need to have as I'm using the plugin
  'jquery-bbq': 'jquery-bbq/jquery.ba-bbq',
  'jquery.cookie': 'jquery.cookie/jquery.cookie',
  'jquery.chosen': 'chosen/chosen.jquery.min',
  'jquery.colorpicker': 'jQuery-ColorPicker/colorpicker',
  'jquery.fileupload': 'blueimp-file-upload/js/jquery.fileupload',
  'jquery.scrollTo': 'jquery.scrollto/jquery.scrollTo',
  'jquery.tagsinput': 'jquery-tags-input/src/jquery.tagsinput',
  'jquery.tablednd': 'TableDnD/js/jquery.tablednd',
  'jquery.ui': 'jquery-ui/jquery-ui',
  'jquery.ui.widget': 'blueimp-file-upload/js/vendor/jquery.ui.widget',
  'jquery.validate': 'jquery-validation/dist/jquery.validate',
  'json2': 'JSON-js/json2'
},

删除引用后,构建过程成功。

答案 1 :(得分:0)

我也有这个问题。我没有使用jquery,但是其他一些软件包正在使用window,这使Jasmine puke成为可能。我无法修改程序包,所以我定义了窗口。

在文件jasmine.json中放入

"helpers": [ "helper.js" ],

并在文件helper.js中放入

console.log('===============================');
console.log('=====   BEGIN UNIT TEST   =====');
console.log('===============================');

global.window = {};

现在问题已解决。