angularjs requeirjs配置相关

尝试了网上的yeoman generator 生成的脚手架项目不甚理想

npm install -g generator-angular-require

yo angular-require

就不用那个了,现在在github上找来一个仔细研究下。

目录结构:

符合yeoman脚手架的基本目录结构

重点看一下 script下的目录结构

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-bootstrap
window.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主要配置了requirejs的基本配置,包括path和shim的配置,shim是为了配置那些不支持amd规范的配置。

angular.element().ready(function() {

angular.resumeBootstrap([app.name]);

});

启动angular,或者可以写成另一种方法

require([‘domReady!‘], function (document) {

angular.bootstrap(document, [‘app‘]);

});

这样写需要在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‘
              });
            }
      ]);
});

注意上面的app.name就是MyApp

这个js定义了angular的路由和整个app所以来的模块和服务,例如controllers和services这些是自己定义的module需要define是引入controllers/controllers和services/services

还有一些angular内置的模块服务例如ngRoute,

注意module的名字要个依赖时写的一样。

service文件夹下主要放置call api的代码,规范应该是这样的。

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

自定义了一个提供userService的module,如果想在controllers里用到这个module可以

define([‘controllers/controllers‘, ‘services/userService‘],
  function(controllers) {
    controllers.controller(‘RootCtrl‘, [‘$scope‘, ‘UserService‘,
      function($scope, UserService,$http) {

        $scope.name = UserService.getUser();
    }]);
});

注意UserService的名字要保持一至。

之所以有三种common的controllers.js 和 services.js 和 filter.js是为了requirejs时方便一些。

GruntFile.js文件

// 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 <!-- Usemin block --> 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‘
  ]);
};

具体每项的配置可以参考以前的博客,就不多说了。

时间: 2024-10-14 05:46:57

angularjs requeirjs配置相关的相关文章

tiny210(S5PV210)LCD控制器RGB配置相关学习记录

最近在弄210LCD的配置,在这里记录下一些学习的东西,有错恳请指正,互相学习. datasheet里面有好多名词,先记录一下一些名词的大概意思: alpha blending:本来采用R.G.B三通道来表示颜色,但是显示控制器分为5个图层,故图层混合时需要按照一定的比例因子来混合以实现图层的透明度,而不至于将背景图层完全覆盖掉,现在增加alpha通道来作为那个颜色混合时的调节因子,配置相关的设置后,透过调节alpha值则可以实现图层间透明度的控制,而所谓的透明度,相当于是两图层的按照不同的合成

ubuntu 主机配置相关命令

使用ubuntu系统这么久了,但还主要是停留在简单的使用上,好多关于系统设置方面的命令平时用的少,看书的时候一晃而过,也就忘记了,到用的时候又要去找,很麻烦,今天开始就在这记录平时遇到问题需要解决时查找的一些命令,也方便以后的回忆和查阅. ubuntu下查看电脑的配置: lshw -short H/W path       Device  Class          Description=================================================    

memcached的基本命令(安装、卸载、启动、配置相关)

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

GBrowse配置相关资料

GBrowse配置相关资料(形状.颜色.配置.gff3) http://gmod.org/wiki/Glyphs_and_Glyph_Optionshttp://gmod.org/wiki/GBrowse_Configuration/Glyphs http://gmod.org/wiki/GBrowse_Configuration/Feature_frequency_histograms (2010)http://boyun.sh.cn/bio/?p=1817 (2011  GBrowse之频率

Linux网络属性配置相关命令

Linux网络属性配置相关命令: 前言: Linux属性配置可以分为两类.一类通过命令配置,另一类通过修改配置文件配置. Linux属性配置的相关命令可以分为三大类: 一.ifcfg命令家族:①ifconfig,②route,③netstat,④hostname ①ifconfig命令:主要负责接口及地址查看和管理 ifconfig [INTERFACE] #ifconfig -a:显示所有接口,包括inactive状态的接口.(包括激活和未激活的接口): 如图所示,-a选项将会显示所有接口,包

centOS中网络配置相关文件配置选项说明

CentOS 修改IP地址等网络相关的配置文件 找到对应网卡的IP地址配置文件:ifcfg-eth数字.路径:/etc/sysconfig/network-scripts/ifcfg-eth数字文件内配置项说明 DEVICE=eth0 #描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为eth0  BOOTPROTO=static #设置网卡获得ip地址的方式,选项有:static(静态),dhcp(通过DHCP获取IP)或bootp(使用BOOTP协议获得IP)  BROADCAST

用户配置相关文件

用户配置相关文件小总结 /etc/passwd         记录用户相关的信息 /etc/shadow         密码影子文件 /etc/group          记录用户组相关的信息 /etc/gshadow         密码影子文件(组密码) /etc/passwd  文件中各段的内容 第1段:用户名 第2段:密码占位符,真正的密码在/etc/shadow文件中 第3段:用户的UID(用户ID) 0:超级用户        若将普通用户的ID变为0,则该用户拥有超级用户的权

Qt4.8.5配置相关问题

空余时间想看看Qt,在安装和编译过程中遇到了一些值得记录的东西,总结一下. (一)安装 1.先安装编译环境qt-creator-win-opensource-3.0.0.exe,使用默认路径C:\Qt\qtcreator-3.0.0 2.解压缩编译器工具MinGW-gcc440_1.zip,把里面的文件夹mingw拷贝到路径C:\Qt\mingw 3.解压缩调试器工具qtcreator-gdb-7.4-MINGW32_NT-6.1-i686.tar.gz,把里面的文件夹qtcreator-gdb

linux网络配置相关文件

网络接口(interface)是网络硬件设备在操作系统中的表示方法,比如网卡在Linux操作系统中用ethX,是由0开始的正整数,比如eth0.eth1...... ethX.而普通猫和ADSL的接口是 pppX,比如ppp0等: 机器中所有可用网卡及名字: 参考:linux网络配置相关命令.虚拟网络接口eth0:0 网关GateWay配置地址: /etc/sysconfig/network  GATEWAY=192.168.1.250 /etc/sysconfig/network-script