2014-10-30 53 views
0

我有一个大规模的传统项目,我正在研究,我正在用browserify,backbone,marionette构建一些功能。但是,当我将jQuery放入我的browserify设置中时,该版本会覆盖在browserify脚本加载之前已加载到我的页面中的不同版本的jQuery。我不希望发生这种情况。我需要保持旧的jQuery引用分开。browserify中没有冲突jQuery

是否有可能让我的shimmed jQuery引用对我的browserify代码完全私有?我想我需要使用jQuery的没有冲突模式,但是我怎么在browserfiy的grunt配置设置中做到这一点。

这是我目前在grunt中的browserify设置。

 vendor: { 
      src: ['www/libs/*.js'], 
      dest: 'www/javascript/built/vendor.js', 
      options: { 
       shim: { 
        jquery: { 
         path: 'www/bower_components/jquery/jquery.js', 
         exports: 'jQuery' 
        }, 
        underscore: { 
         path: 'www/bower_components/underscore/underscore.js', 
         exports: '_' 
        }, 
        backbone: { 
         path: 'www/bower_components/backbone/backbone.js', 
         exports: 'Backbone', 
         depends: { 
          underscore: 'underscore' 
         } 
        }, 
        'backbone.marionette': { 
         path: 'www/bower_components/backbone.marionette/lib/backbone.marionette.js', 
         exports: 'Marionette', 
         depends: { 
          jquery: '$', 
          backbone: 'Backbone', 
          underscore: '_' 
         } 
        } 
       } 
      } 
     }, 

感谢

回答

2

我解决了这个问题,而无需使用的哼声和凉亭,但我认为它可能会转化。

这需要安装browserify-shim,尽管可能有一种方法可以直接配置browserify来执行此操作,因为它具有垫片的配置选项。

这里是我的package.json:

// aliases for browserify 
"browser": { 
    "jquery": "./js/vendor/browserify-hax.js", 
    // a pre-built jquery 
    "static-jquery": "./js/vendor/jquery.js" 
}, 
// tell browserify to use browserify-shim 
"browserify": { 
    "transform": [ 
    "browserify-shim" 
    ] 
}, 
// Tell browserify shim how to generate module.exports 
"browserify-shim": { 
    "static-jquery": { 
    "exports": "$" 
    } 
} 

在JS /供应商/ browserify-hax.js:

"use strict"; 
var jQuery = require('static-jquery'); 
var nonGlobal = jQuery.noConflict(true); 
module.exports = nonGlobal; 

在我的应用程序的代码,我可以用require('jquery'),我会得到一个jQuery从与现有全局版本不冲突的捆绑中获得。它应该是安全的,因为直到它被编辑为require之前,被限制的模块才被实际定义。无论如何,使用jQuery().jquery来检查库的版本是否像你期望的那样是值得的。

对我来说,这感觉像一个非常混乱的解决方案,但它是唯一的方法,我可以找到捆绑jQuery时,当你已经有另一个全球。我很想知道你是否能想出更好的解决方案。

我也尝试过直接从npm使用jQuery,但我无法在browserify包中正确编译它,尽管它在node.js中直接使用require时工作正常。我坚持使用git构建的预构建jquery。