2016-01-27 17 views
5

Ich verschiebe eine bestehende Webapp von requirejs zu webpack.

Ich habe ein Problem mit der Art, wie jQuery importiert/shimmed wird.

In meiner gebündelten js, bekomme ich einen $ is not a function Fehler aus dem Bootstrap-Javascript.

Wenn ich console.log($) aus dem gebündelten Skript es ein leeres Objekt zeigt: object {}

Ich gehe davon aus, dass dies, weil nichts von jQuery exportiert wird, wie es traditionell $ an das Fenster-Objekt festgelegt würde und durchgeführt werden.

Einige Untersuchungen verwiesen mich auf Webpack-Plugins (siehe meine webpack.config.js unten), aber dies scheint das Problem nicht zu lösen.

Ist in meiner Konfiguration etwas falsch?

Dank

Mein webpack.config.js:

var path = require('path'); 
var webpack = require('webpack'); 
module.exports = { 
    //devtool: 'source-map', 

entry: ['./mobile.js'], 
resolve: { 
    root: "./js/", 
    alias: { 

     jquery: 'libs/jquery-1.9.1', 
     underscore: "libs/lodash-1.0.1", 
     //backbone: 'libs/backbone-1.0.0', 
     backbone: 'libs/backbone-0.9.10', 
     bootstrap: "libs/bootstrap-2.3.1", 
     ...... 
    } 
}, 
resolveLoader: { 
    root: path.join(__dirname, 'node_modules') 
}, 
output: { 
    path: './', 
    filename: 'bundle.js' 
}, 
plugins: [ 
    new webpack.ProvidePlugin({ 
     $: "jquery", 
     jQuery: "jquery", 
     "window.jQuery": "jquery" 
    }) 
], 
module : { 
    loaders: [ 
     { test: /\.html$/, loader: "text" }, 
     { test: /\.json$/, loader: "json" } 
    ] 


    } 
} 

Das Bündel Code säumige zusammengestellt:

/***/ function(module, exports, __webpack_require__) { 

    /* WEBPACK VAR INJECTION */(function(__webpack_provided_window_dot_jQuery) {/* =================================================== 
    * bootstrap-transition.js v2.3.1 
    * http://twitter.github.com/bootstrap/javascript.html#transitions 
    * =================================================== 
    * Copyright 2012 Twitter, Inc. 
    * 
    * Licensed under the Apache License, Version 2.0 (the "License"); 
    * you may not use this file except in compliance with the License. 
    * You may obtain a copy of the License at 
    * 
    * http://www.apache.org/licenses/LICENSE-2.0 
    * 
    * Unless required by applicable law or agreed to in writing, software 
    * distributed under the License is distributed on an "AS IS" BASIS, 
    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    * See the License for the specific language governing permissions and 
    * limitations under the License. 
    * ========================================================== */ 


    !function ($) { 

     console.log($); //THIS GIVES THE EMPTY OBJECT {} 
     "use strict"; // jshint ;_; 


     /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) 
     * ======================================================= */ 

     $(function() { //$ IS NOT A FUNCTION OCCURS HERE 

     $.support.transition = (function() { 
......... 
......... 
+0

Wenn Sie die Quelle Ihrer Seite zu sehen, ist die jQuery .js-Datei enthalten? – unicorn2

+0

Was passiert in der Konsole, wenn Sie '$ .fn.jquery' versuchen? Dies sollte die Version von jQuery anzeigen, die Sie verwenden, wenn es geladen wird – Adjit

+0

Irgendwelche 'Konsolen 'Fehler? –

Antwort

2

Sie auch exports-loader versuchen:

npm install --save-dev exports-loader 

Und Konf ig:

{ 
    include: require.resolve('libs/jquery-1.9.1'), 
    loader: 'exports-loader?window.jQuery' 
} 

OR das Problem, dass ProviderPlugin nicht jquery alias gelesen werden können, so versuchen:

new webpack.ProvidePlugin({ 
    $: "libs/jquery-1.9.1", 
    jQuery: "libs/jquery-1.9.1", 
    "window.jQuery": "libs/jquery-1.9.1" 
})