Search code examples
angularjsdependenciesmeanjsdraw2d-js

Mean.js - How to inject a 3rd party dependency (draw2d)?


I'm beginning with the MEAN Stack and I'm struggling to do something I'm sure it's pretty basic.

I'm trying to inject a new instance of draw2d provided by their downloadable library.

I keep having : "ncaught Error: [$injector:modulerr] Failed to instantiate module mean due to: Error: [$injector:modulerr] Failed to instantiate module draw2d due to: Error: [$injector:nomod] Module 'draw2d' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument."

Comming from :


modules/core/client/app/config.js

  var applicationModuleVendorDependencies = ['ngResource', 'ngAnimate', 'ngMessages', 'ui.router', 'ui.bootstrap', 'ui.utils', 'angularFileUpload', 'draw2d'];

Here are the other files :


modules/mymodule/client/controllers/projects.client.controller.js

...
ProjectsController.$inject = ['$scope', '$state', 'Authentication', 'projectResolve', 'draw2d'];

function ProjectsController ($scope, $state, Authentication, project, draw2d) {
    $scope.$on('$viewContentLoaded', function(event){
        var canvas = new draw2d.create('canvas');
    }
);
...

modules/mymodule/client/services/draw2d.client.service.js

(function () {
  'use strict';

  angular
    .module('mymodule')
    .factory('draw2d', draw2d);

  function draw2d() {
    return {
      create: function (divName) {
        var Draw2d = draw2d;
        return new Draw2d().Canvas('canvas');
      }
    };
  }
})();

The module's package is in "public/lib/vendors/draw2d"

config/assets/default.js

'use strict';

module.exports = {
  client: {
    lib: {
      css: [
        'public/lib/bootstrap/dist/css/bootstrap.css',
        'public/lib/bootstrap/dist/css/bootstrap-theme.css'
      ],
      js: [
        'public/lib/vendors/draw2d/lib/canvg.js',
        'public/lib/vendors/draw2d/lib/Class.js',
        'public/lib/vendors/draw2d/lib/jquery-1.10.2.min.js',
        'public/lib/vendors/draw2d/lib/jquery-touch_punch.js',
        'public/lib/vendors/draw2d/lib/jquery.autoresize.js',
        'public/lib/vendors/draw2d/lib/jquery.contextmenu.js',
        'public/lib/vendors/draw2d/lib/json2.js',
        'public/lib/vendors/draw2d/lib/pathfinding-browser.min.js',
        'public/lib/vendors/draw2d/lib/raphael.js',
        'public/lib/vendors/draw2d/lib/rgbcolor.js',
        'public/lib/vendors/draw2d/lib/shifty.js',
        'public/lib/vendors/draw2d/lib/StackBlur.js',
        'public/lib/vendors/draw2d/src/draw2d.js',

        'public/lib/angular/angular.js',
        'public/lib/angular-resource/angular-resource.js',
        'public/lib/angular-animate/angular-animate.js',
        'public/lib/angular-messages/angular-messages.js',
        'public/lib/angular-ui-router/release/angular-ui-router.js',
        'public/lib/angular-ui-utils/ui-utils.js',
        'public/lib/angular-bootstrap/ui-bootstrap-tpls.js',
        'public/lib/angular-file-upload/angular-file-upload.js',
        'public/lib/owasp-password-strength-test/owasp-password-strength-test.js'
      ],
      tests: ['public/lib/angular-mocks/angular-mocks.js']
    },
    css: [
      'modules/*/client/css/*.css',
      'public/lib/vendors/draw2d/css/contextmenu.css'
    ],
    less: [
      'modules/*/client/less/*.less'
    ],
    sass: [
      'modules/*/client/scss/*.scss'
    ],
    js: [
      'modules/core/client/app/config.js',
      'modules/core/client/app/init.js',
      'modules/*/client/*.js',
      'modules/*/client/**/*.js'
    ],
    views: ['modules/*/client/views/**/*.html'],
    templates: ['build/templates.js']
  },
  server: {
    gruntConfig: 'gruntfile.js',
    gulpConfig: 'gulpfile.js',
    allJS: ['server.js', 'config/**/*.js', 'modules/*/server/**/*.js'],
    models: 'modules/*/server/models/**/*.js',
    routes: ['modules/!(core)/server/routes/**/*.js', 'modules/core/server/routes/**/*.js'],
    sockets: 'modules/*/server/sockets/**/*.js',
    config: 'modules/*/server/config/*.js',
    policies: 'modules/*/server/policies/*.js',
    views: 'modules/*/server/views/*.html'
  }
};

modules/mymodule/core.client.module.js

(function (app) {
    'use strict';

    app.registerModule('mymodule', ['core']);// The core module is required for special route handling; see /core/client/config/core.client.routes
    app.registerModule('mymodule.services');
    app.registerModule('kmymodule.routes', ['ui.router', 'mymodule.services']);
})(ApplicationConfiguration);

Can you please help me in explaining me what I did miss ? Thanks a lot for your precious help ! :)


Solution

  • Oh boy, I found what was providing this error. I didn't have to declare it in the project dependency. Works now...