Configure a generic jQuery plugin with Browserify-shim?

前端 未结 4 590
南笙
南笙 2020-12-07 12:40

I\'m using browserify-shim and I want to use a generic jQuery plugin. I have looked over the Browserify-shim docs multiple times and I just can\'t seem to understand what\'s

4条回答
  •  一生所求
    2020-12-07 13:11

    For everyone, who is looking for a concrete example:

    The following is an example of package.json and app.js files for a jQuery plugin that attaches itself to the jQuery/$ object, e.g.: $('div').expose(). I don't want jQuery to be a global variable (window.jQuery) when I require it, that's why jQuery is set to 'exports': null. However, because the plugin is expecting a global jQuery object to which it can attach itself, you have to specify it in the dependency after the filename: ./jquery-2.1.3.js:jQuery. Furthermore you need to actually export the jQuery global when using the plugin, even if you don't want to, because the plugin won't work otherwise (at least this particular one).

    package.json

    {
      "name": "test",
      "version": "0.1.0",
      "description": "test",
      "browserify-shim": {
        "./jquery-2.1.3.js": { "exports": null },
        "./jquery.expose.js": { "exports": "jQuery", "depends": [ "./jquery-2.1.3.js:jQuery" ] }
      },
      "browserify": {
        "transform": [
          "browserify-shim"
        ]
      }
    }
    

    app.js

    // copy and delete any previously defined jQuery objects
    if (window.jQuery) {
      window.original_jQuery = window.jQuery;
      delete window.jQuery;
    
      if (typeof window.$.fn.jquery === 'string') {
        window.original_$ = window.$;
        delete window.$;
      }
    }
    
    // exposes the jQuery global
    require('./jquery.expose.js');
    // copy it to another variable of my choosing and delete the global one
    var my_jQuery = jQuery;
    delete window.jQuery;
    
    // re-setting the original jQuery object (if any)
    if (window.original_jQuery) { window.jQuery = window.original_jQuery; delete window.original_jQuery; }
    if (window.original_$) { window.$ = window.original_$; delete window.original_$; }
    
    my_jQuery(document).ready(function() {
      my_jQuery('button').click(function(){
        my_jQuery(this).expose();
      });
    });
    

    In the above example I didn't want my code to set any globals, but I temporarily had to do so, in order to make the plugin work. If you only need jQuery, you could just do this and don't need any workaround: var my_jQuery = require('./jquery-2.1.3.js'). If you are fine with your jQuery being exposed as a global, then you can modify the above package.json example like so:

      "browserify-shim": {
        "./jquery-2.1.3.js": { "exports": "$" },
        "./jquery.expose.js": { "exports": null, "depends": [ "./jquery-2.1.3.js" ] }
    

    Hope that helps some people, who were looking for concrete examples (like I was, when I found this question).

提交回复
热议问题