Angularjs requeirjs Configuration

Source: Internet
Author: User
Tags webp

The scaffolding project generated by yeoman generator on the Internet is not ideal.


Npm install-g generator-angular-require


Yo angular-require


I don't need that anymore. Now I am looking for a closer look at it on github.


Directory structure:


Conforms to the basic directory structure of yeoman scaffolding <喎?http: www.bkjia.com kf ware vc " target="_blank" class="keylink"> VcD4KPHA + 1ti147 + 00rvPwiBzY3JpcHTPwrXExL/CvL3hubk8L3A + fingerprint = "http://www.2cto.com/uploadfile/Collfiles/20140430/20140430090813397.jpg" alt = "\">

Main. js


/*jshint unused: vars */require.config({  baseUrl: '../scripts',  paths: {    underscore: '../bower_components/underscore/underscore',    jquery: '../bower_components/jquery/dist/jquery',    bootstrap: '../bower_components/company-theme.git/src/js/bootstrap/bootstrap',    dcjqaccordion: '../bower_components/company-theme.git/src/js/jquery.dcjqaccordion.2.7',    scrollTo: '../bower_components/company-theme.git/src/js/jquery.scrollTo.min',    nicescroll: '../bower_components/company-theme.git/src/js/jquery.nicescroll',    select: '../bower_components/company-theme.git/src/js/bootstrap-select',    ui: '../bower_components/company-theme.git/src/js/aug-ui',    angular: '../bower_components/angular/angular',    'angular-route': '../bower_components/angular-route/angular-route',    'angular-cookies': '../bower_components/angular-cookies/angular-cookies',    'angular-sanitize': '../bower_components/angular-sanitize/angular-sanitize',    'angular-resource': '../bower_components/angular-resource/angular-resource',    'angular-mocks': '../bower_components/angular-mocks/angular-mocks',    'angular-scenario': '../bower_components/angular-scenario/angular-scenario'  },  shim: {    underscore: {      exports: 'underscore'    },    bootstrap: {      deps: [        'jquery'      ],      exports: 'bootstrap'    },    dcjqaccordion: {      deps: [        'jquery'      ],      exports: 'dcjqaccordion'    },    scrollTo: {      deps: [        'jquery'      ],      exports: 'scrollTo'    },    nicescroll: {      deps: [        'jquery'      ],      exports: 'nicescroll'    },    select: {      deps: [        'jquery'      ],      exports: 'select'    },    ui: {      deps: [        'dcjqaccordion',        'nicescroll',        'scrollTo',        'select'      ],      exports: 'ui'    },    angular: {      deps: [        'jquery'      ],      exports: 'angular'    },    'angular-route': [      'angular'    ],    'angular-cookies': [      'angular'    ],    'angular-sanitize': [      'angular'    ],    'angular-resource': [      'angular'    ],    'angular-mocks': {      deps: [        'angular'      ],      exports: 'angular.mock'    }  },  priority: [    'angular'  ]});//http://code.angularjs.org/1.2.1/docs/guide/bootstrap#overview_deferred-bootstrapwindow.name = 'NG_DEFER_BOOTSTRAP!';require([  'angular',  'app',  'underscore',  'jquery',  'bootstrap',  'dcjqaccordion',  'scrollTo',  'nicescroll',  'select',  'ui',  'angular-route',  'angular-cookies',  'angular-sanitize',  'angular-resource',  'controllers/rootController',  'services/userService',  'directives/ngbkFocus'], function(angular, app) {  'use strict';  angular.element().ready(function() {    angular.resumeBootstrap([app.name]);  });});


Main. js mainly configures basic requirejs configurations, including path and shim configurations. shim is used to configure those that do not support amd specifications.


Angular. element (). ready (function (){
Angular. resumeBootstrap ([app. name]);
});

Start angular, Or you can write it as another method.


Require (['domainready! '], Function (document ){

Angular. bootstrap (document, ['app']);

});

In this way, you need to configure in path.

'Domready': '../lib/requirejs-domReady/domready ',


App. js


define(['angular', 'controllers/controllers',    'services/services', 'filters/filters',    'directives/directives'], function (angular) {    return angular.module('MyApp', ['controllers', 'services','filters', 'directives','ngCookies','ngResource','ngSanitize','ngRoute'])        .config(['$routeProvider',        function($routeProvider) {              $routeProvider.when('/', {                templateUrl: 'views/root.html',                controller: 'RootCtrl'              });            }      ]);});


Note that the above app. name is MyApp

This js defines angular routing and all modules and services from the app. For example, controllers and services are self-defined modules. define is used to introduce controllers/controllers and services/services.


There are also some angular built-in module services such as ngRoute,


Note that the module name must be the same as that written during dependency.


The code for storing call APIs in the service folder should be as follows.

define(['services/services'],  function(services) {    services.factory('UserService', [      function($http) {        return {          getUser: function() {            return 'testUser';          }        };      }]);  });


Customizes a module that provides userService. If you want to use this module in controllers

define(['controllers/controllers', 'services/userService'],  function(controllers) {    controllers.controller('RootCtrl', ['$scope', 'UserService',      function($scope, UserService,$http) {        $scope.name = UserService.getUser();    }]);});

Note that the UserService name must be one to one.

Three common controllers. js, services. js, and filter. js are convenient for requirejs.

GruntFile. js File

// Generated on 2014-04-25 using generator-angular-require 0.1.13'use strict';// # Globbing// for performance reasons we're only matching one level down:// 'test/spec/{,*/}*.js'// use this if you want to recursively match all subfolders:// 'test/spec/**/*.js'module.exports = function (grunt) {  // Load grunt tasks automatically  require('load-grunt-tasks')(grunt);  // Time how long tasks take. Can help when optimizing build times  require('time-grunt')(grunt);  // Define the configuration for all the tasks  grunt.initConfig({    // Project settings    yeoman: {      // configurable paths      app: require('./bower.json').appPath || 'app',      dist: 'dist'    },    // Watches files for changes and runs tasks based on the changed files    watch: {      js: {        files: ['<%= yeoman.app %>/scripts/{,*/}*.js'],        tasks: ['newer:jshint:all'],        options: {          livereload: true        }      },      jsTest: {        files: ['test/spec/{,*/}*.js'],        tasks: ['newer:jshint:test', 'karma']      },      styles: {        files: ['<%= yeoman.app %>/styles/{,*/}*.css'],        tasks: ['newer:copy:styles', 'autoprefixer']      },      gruntfile: {        files: ['Gruntfile.js']      },      livereload: {        options: {          livereload: '<%= connect.options.livereload %>'        },        files: [          '<%= yeoman.app %>/{,*/}*.html',          '.tmp/styles/{,*/}*.css',          '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'        ]      },      less: {        files: ['**/*.less'],        tasks: [ 'less'],        options: {          livereload: true        }      }    },    // The actual grunt server settings    connect: {      options: {        port: 9000,        // Change this to '0.0.0.0' to access the server from outside.        hostname: 'localhost',        livereload: 35729      },      livereload: {        options: {          open: true,          base: [            '.tmp',            '<%= yeoman.app %>'          ]        }      },      test: {        options: {          port: 9001,          base: [            '.tmp',            'test',            '<%= yeoman.app %>'          ]        }      },      dist: {        options: {          base: '<%= yeoman.dist %>'        }      }    },    // Make sure code styles are up to par and there are no obvious mistakes    jshint: {      options: {        jshintrc: '.jshintrc',        reporter: require('jshint-stylish')      },      all: [        'Gruntfile.js',        '<%= yeoman.app %>/scripts/{,*/}*.js'      ],      test: {        options: {          jshintrc: 'test/.jshintrc'        },        src: ['test/spec/{,*/}*.js']      }    },    // Empties folders to start fresh    clean: {      dist: {        files: [{          dot: true,          src: [            '.tmp',            '<%= yeoman.dist %>/*',            '!<%= yeoman.dist %>/.git*'          ]        }]      },      server: '.tmp'    },    // Add vendor prefixed styles    autoprefixer: {      options: {        browsers: ['last 1 version']      },      dist: {        files: [{          expand: true,          cwd: '.tmp/styles/',          src: '{,*/}*.css',          dest: '.tmp/styles/'        }]      }    },    // Automatically inject Bower components into the app    'bower-install': {      app: {        html: '<%= yeoman.app %>/index.html',        ignorePath: '<%= yeoman.app %>/'      }    },    // Renames files for browser caching purposes    rev: {      dist: {        files: {          src: [            '<%= yeoman.dist %>/scripts/{,*/}*.js',            '<%= yeoman.dist %>/styles/{,*/}*.css',            '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',            '<%= yeoman.dist %>/styles/fonts/*'          ]        }      }    },    // Reads HTML for usemin blocks to enable smart builds that automatically    // concat, minify and revision files. Creates configurations in memory so    // additional tasks can operate on them    useminPrepare: {      html: '<%= yeoman.app %>/index.html',      options: {        dest: '<%= yeoman.dist %>'      }    },    // Performs rewrites based on rev and the useminPrepare configuration    usemin: {      html: ['<%= yeoman.dist %>/{,*/}*.html'],      css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],      options: {        assetsDirs: ['<%= yeoman.dist %>']      }    },    // The following *-min tasks produce minified files in the dist folder    imagemin: {      dist: {        files: [{          expand: true,          cwd: '<%= yeoman.app %>/images',          src: '{,*/}*.{png,jpg,jpeg,gif}',          dest: '<%= yeoman.dist %>/images'        }]      }    },    svgmin: {      dist: {        files: [{          expand: true,          cwd: '<%= yeoman.app %>/images',          src: '{,*/}*.svg',          dest: '<%= yeoman.dist %>/images'        }]      }    },    htmlmin: {      dist: {        options: {          collapseWhitespace: true,          collapseBooleanAttributes: true,          removeCommentsFromCDATA: true,          removeOptionalTags: true        },        files: [{          expand: true,          cwd: '<%= yeoman.dist %>',          src: ['*.html', 'views/{,*/}*.html'],          dest: '<%= yeoman.dist %>'        }]      }    },    // Allow the use of non-minsafe AngularJS files. Automatically makes it    // minsafe compatible so Uglify does not destroy the ng references    ngmin: {      dist: {        files: [{          expand: true,          cwd: '.tmp/concat/scripts',          src: '*.js',          dest: '.tmp/concat/scripts'        }]      }    },    // Replace Google CDN references    cdnify: {      dist: {        html: ['<%= yeoman.dist %>/*.html']      }    },    // Copies remaining files to places other tasks can use    copy: {      dist: {        files: [{          expand: true,          dot: true,          cwd: '<%= yeoman.app %>',          dest: '<%= yeoman.dist %>',          src: [            '*.{ico,png,txt}',            '.htaccess',            '*.html',            'views/{,*/}*.html',            'bower_components/requirejs/**/*',            'images/{,*/}*.{webp}',            'fonts/*'          ]        }, {          expand: true,          cwd: '.tmp/images',          dest: '<%= yeoman.dist %>/images',          src: ['generated/*']        },        {          expand: true,          dot: true,          cwd: '<%= yeoman.app %>',          dest: '<%= yeoman.dist %>/fonts',          src: ['bower_components/company-theme.git/src/css/fonts/*'],          flatten: true        }]      },      styles: {        expand: true,        cwd: '<%= yeoman.app %>/styles',        dest: '.tmp/styles/',        src: '{,*/}*.css'      }    },    // Run some tasks in parallel to speed up the build process    concurrent: {      server: [        'copy:styles'      ],      test: [        'copy:styles'      ],      dist: [        'copy:styles',        'imagemin',        'svgmin'      ]    },    // By default, your `index.html`'s 
  will take care of    // minification. These next options are pre-configured if you do not wish    // to use the Usemin blocks.    cssmin: {      options: {        keepSpecialComments: '0'      },      dist: {        files: {          '<%= yeoman.dist %>/styles/main.css': [            '.tmp/styles/{,*/}*.css',            '<%= yeoman.app %>/styles/{,*/}*.css'          ]        }      }    },    // uglify: {    //   dist: {    //     files: {    //       '<%= yeoman.dist %>/scripts/scripts.js': [    //         '<%= yeoman.dist %>/scripts/scripts.js'    //       ]    //     }    //   }    // },    // concat: {    //   dist: {}    // },    // Test settings    karma: {      unit: {        configFile: 'karma.conf.js',        singleRun: true      }    },    // Settings for grunt-bower-requirejs    bower: {      app: {        rjsConfig: '<%= yeoman.app %>/scripts/main.js',        options: {          exclude: ['requirejs', 'json3', 'es5-shim']        }      }    },    replace: {      test: {        src: '<%= yeoman.app %>/../test/test-main.js',        overwrite: true,        replacements: [{          from: /paths: {[^}]+}/,          to: function() {            return require('fs').readFileSync(grunt.template.process('<%= yeoman.app %>') + '/scripts/main.js').toString().match(/paths: {[^}]+}/);          }        }]      }    },    less: {            dist: {                expand: true,                cwd: "<%= yeoman.app %>/styles",                src: "{,*/}*.less",                dest: ".tmp/styles",                ext: ".css"                              }    },    // r.js compile config    requirejs: {      dist: {        options: {          dir: "<%= yeoman.dist %>/scripts/",          modules: [{            name: 'main'          }],          preserveLicenseComments: false, // remove all comments          removeCombined: true,          baseUrl: '<%= yeoman.app %>/scripts',          mainConfigFile: '<%= yeoman.app %>/scripts/main.js',          optimize: 'uglify2',          uglify2: {            mangle: false          }        }      }    }  });  grunt.registerTask('serve', function (target) {    if (target === 'dist') {      return grunt.task.run(['build', 'connect:dist:keepalive']);    }    grunt.task.run([      'clean:server',      'bower-install',      'concurrent:server',      'autoprefixer',      'connect:livereload',      'less',      'watch'    ]);  });  grunt.registerTask('server', function (target) {    grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');    grunt.task.run(['serve:' + target]);  });  grunt.registerTask('test', [    'clean:server',    'concurrent:test',    'autoprefixer',    'connect:test',    'karma'  ]);  grunt.registerTask('build', [    'clean:dist',    'less',    'bower-install',    'bower:app',    'replace:test',    'useminPrepare',    'concurrent:dist',    'autoprefixer',    'concat',    'ngmin',    'copy:dist',    'cdnify',    'cssmin',    // Below task commented out as r.js (via grunt-contrib-requirejs) will take care of this    // 'uglify',    'requirejs:dist',    'rev',    'usemin',    'htmlmin'  ]);  grunt.registerTask('default', [    'newer:jshint',    'test',    'build'  ]);};

For details about each configuration item, refer to the previous blog.

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.