Error while including a third party JS module in my plugin

NodeBB Development
  • My plugin.json

    	"modules": {
    		"geocomplete.js": "static/lib/geocomplete/jquery.geocomplete.min.js",
    		"tree.js": "static/lib/jstree/jstree.min.js"
    	},
    

    In my map.js file

    requirejs(["tree"], function(tree) {
    ...
    }
    

    When I run, the browser raises this error:

    Uncaught TypeError: Cannot read property 'jstree' of undefined
        at tree.js?v=pl4hsgl3sro:2
        at Object.execCb (require.js:29)
        at w.check (require.js:18)
        at w.<anonymous> (require.js:22)
        at require.js:7
        at require.js:23
        at y (require.js:6)
        at w.emit (require.js:23)
        at w.check (require.js:19)
        at w.enable (require.js:23)
    

    When I hover over the second line i.e. at tree.js?v=pl4hsgl3sro:2
    it displays this path: localhost:4567/src/modules/tree.js?v=pl4hsgl3sro:2

    When I click on it it displays the contents (minified code) of the tree.min.js in the Sources heading.

    What shall I do, kindly help me resolve this error.

  • I suggest changing it to use the unminified files, this way you get the actual code in development. NodeBB automatically minifies all of those files in a production environment anyways. I also suggest you change it to use the same filename as the original: jstree.js instead of tree.js.

    Then you should be able to debug a little easier.

  • Hi Pita

    Ok I understand. Do you mean to say that there is a bug in jstree.js itself and not in our setup?

    Regards

  • Tried out several ways to solve this errror but none worked. Which version of jQuery is used by the NodeBB currently? Can we use a specific version of jQuery while running NodeBB, if yes, how?

    FYI jsTree requires 1.9.0 or greater.

  • I think I have the same issues as described in this URL:

    But there is no definitive answer over there.

  • This is how I resolved the error:

    requirejs.config({
      shim: {
        jquery: {
          exports: '$'
        }
      }
    });
    
    requirejs(["jstree"], function(jstree) { ... }
    
    

    It may help somebody if she needs to integrate the jstree (popular jQuery plugin) with NodeBB in future.

  • Yes, I believe you either need to do this, or alter the jstree.js file itself to change references to jQuery to just use global (as in, don't require jQuery at all)


Suggested Topics