2016-01-27 38 views
5

Przenoszę istniejącą aplikację webową z requirejs do pakietu internetowego.

Mam problem ze sposobem importowania/shimmed jQuery.

W pakiecie js otrzymuję komunikat o błędzie $ is not a function z javascriptu ładowania początkowego.

Kiedy console.log($) z poziomu dołączonego skryptu ujawnia pusty obiekt: object {}

jestem przy założeniu, że to dlatego, że nic nie jest wywożona z jQuery, jak to tradycyjnie ustawić $ do obiektu window i zrobienia.

Niektóre badania wskazały, że używam pluginów webpack (zobacz mój webpack.config.js poniżej), ale nie wydaje się, aby rozwiązać problem.

Czy jest coś nie tak w mojej konfiguracji?

Dzięki

Moi 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" } 
    ] 


    } 
} 

przestępstwa skompilowany kod bundle:

/***/ 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

Podczas przeglądania źródła strony, jest jQuery Plik .js jest wliczony w cenę? – unicorn2

+0

Co dzieje się w konsoli, jeśli wypróbujesz '$ .fn.jquery'? Powinno to wyświetlać wersję jQuery, której używasz, jeśli jest ładowana. – Adjit

+0

Dowolne "konsole"? –

Odpowiedz

2

Można także spróbować exports-loader:

npm install --save-dev exports-loader 

I conf IG:

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

LUB problem może być w tym ProviderPlugin nie czyta jquery alias, więc spróbuj:

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