首页 > 代码库 > Yeoman+Requirejs

Yeoman+Requirejs

最近在写一个单页面应用web工程,后端只提供API接口,想来想去决定用Angular来开发,用Yeoman(yo+grunt+bower)+Requirejs来管理,废话少说今天奉献我的开发环境搭建

我用的是mac系统首先要安装brew,用brew来安装node

curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz -C/usr/local --strip 1 

安装成功后输入命令brew显示如下信息表示安装成功

Example usage:  brew [info | home | options ] [FORMULA...]  brew install FORMULA...  brew uninstall FORMULA...  brew search [foo]  brew list [FORMULA...]  brew update  brew upgrade [FORMULA...]  brew pin/unpin [FORMULA...]Troubleshooting:  brew doctor  brew install -vd FORMULA  brew [--env | config]Brewing:  brew create [URL [--no-fetch]]  brew edit [FORMULA...]  open https://github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/Formula-Cookbook.mdFurther help:  man brew  brew home

Yeoman需要用npm来安装,接下来我们安装node,node安装有很多方法,这里用brew来安装

sudo brew install node

安装成功后输入 node -v 和 npm -v显示版本信息正确代表安装成功

安装Yeoman(yo+grunt+bower)的有一篇非常好的文章,链接如下,我这里就不多说了

http://blog.jobbole.com/65399/

执行到这里项目已经可以跑起来了,但是随着js的增多,index.html加载的js文件越来越多,这就需要一个管理的工具,我这里使用了Requirejs

bower install requirejs
bower install requirejs-domready

安装后的bower.json

{  "name": "webapp",  "version": "0.0.0",  "dependencies": {    "jquery": "~1.9.0",    "angular": "~1.3.3",    "semantic": "~0.19.3",    "json3": "~3.3.1",    "es5-shim": "~3.1.0",    "angular-route": "~1.3.3",    "angular-messages": "~1.3.3",    "requirejs": "~2.1.15",    "requirejs-domready": "~2.0.1"  },  "devDependencies": {    "angular-mocks": "~1.3.3",    "angular-scenario": "~1.3.3"  },  "appPath": "app"}

在bower_components文件夹下就会有requirejs和requirejs-domready

接下来我们安装grunt-requirejs

grunt install grunt-requirejs --save-dev

在Gruntfile.js中增加

// Load grunt tasks automatically require(‘load-grunt-tasks‘)(grunt); grunt.loadNpmTasks(‘grunt-requirejs‘);//整理增加一条命令 // Time how long tasks take. Can help when optimizing build times require(‘time-grunt‘)(grunt); // Configurable paths for the application var appConfig = {   app: require(‘./bower.json‘).appPath || ‘app‘,   dist: ‘dist‘ };

grunt.initConfig({

   // Project settings

   yeoman: appConfig,

   requirejs: {//配置requirejs打包,这里就会根据你的文件树,自动将所有的文件都打包进来

     dist: {

       options: {

         baseUrl        : ‘.tmp/scripts‘,//打包文件的位置

         name           : ‘main‘,//要执行的主文件

         mainConfigFile : ‘.tmp/scripts/main.js‘,//配置的文件

         out            : ‘.tmp/concat/scripts/scripts.js‘//输出的位置

       } 

     }

   },

 

在grunt命令中增加一条

grunt.registerTask(‘build‘, [   ‘clean‘,//    ‘wiredep‘,   ‘useminPrepare‘,   ‘concurrent:dist‘,   ‘autoprefixer‘,   ‘concat‘,   ‘ngAnnotate‘,   ‘copy‘,   ‘requirejs:dist‘,//放在这里,具体的位置根据自己的项目进行调节   ‘cdnify‘,   ‘cssmin‘,   ‘uglify‘,   ‘filerev‘,   ‘usemin‘,   ‘htmlmin‘ ]);

到这里bower和grunt我们配置好了,但是现在我们现在执行命令还不成功

首先requirejs加载文件的写法,官网给出的建议是

<script data-main="main.js" src="http://www.mamicode.com/bower_components/requirejs/require.js"></script>

但是这样写grunt执行htmlmin命令的时候就会报错,鄙人能力有限,找了很多资料最后给出的写法是这样的"分开"!!!!!!

<!-- build:js(.) scripts/vendor.js -->   <!-- bower:js -->   <script src="http://www.mamicode.com/bower_components/requirejs/require.js"></script>   <!-- endbower -->   <!-- endbuild -->   <!-- build:js({.tmp,app}) scripts/scripts.js -->   <script src="http://www.mamicode.com/scripts/main.js"></script>

我们来看下main.js配置

‘use strict‘;require.config({ baseUrl: ‘scripts/‘, paths: {   jquery: ‘../../bower_components/jquery/jquery‘,   angular: ‘../../bower_components/angular/angular‘,   angularRoute : ‘../../bower_components/angular-route/angular-route.min‘,   angularMessages : ‘../../bower_components/angular-messages/angular-messages‘,   requireDomReady : "../../bower_components/requirejs-domready/domReady",   app: ‘controllers/app‘,   "service" : ‘controllers/service‘,   "mainController" : "controllers/main-controller",   "frame" : "controllers/frame",   "mainLib" : "lib/main-lib",   "spin" : "lib/spin",   "jquerySpin" : "lib/jquery.spin",   "jsrender" : "lib/jsrender",   "jAutosize" : "lib/jquery.autosize",   "jColor" : "lib/jquery.color",   "jUnveil" : "lib/jquery.unveil",   "jAtwho" : "lib/jquery.atwho",   "video" : "../swf/video" }, shim: {   angular : { exports : ‘angular‘},   angularRoute:{     deps:[‘angular‘]   },   angularMessages:{     deps:[‘angular‘]   },   jsrender:{     exports : ‘jQuery.fn.render‘   },   jColor:{     exports : ‘jQuery.Color‘   },   jUnveil:{     exports : ‘jQuery.fn.unveil‘   },   jAutosize:{     exports : ‘jQuery.fn.autosize‘   } }});require(["jquery", ‘requireDomReady‘,"angular", "angularRoute", "angularMessages","mainLib","app", "mainController"], function($, domReady, angular) {   domReady(function() {     angular.bootstrap(document.documentElement, [‘myApp‘]);   })});

 这样就会将对应的文件一个加载进来,我们看下app.js,sevice是angular注册的服务

define(["angular", "angularRoute", "angularMessages", "service"], function(angular){    return angular.module("myApp", ["shou.services", "ngRoute", "ngMessages"]);});

看下其他controller注册,这里统一注册了controller

define([‘controllers/config-controller‘, ‘controllers/header-controller‘, ......], function(){});

这样我们就配置好了Yeoman+Requirejs,我们执行命令

grunt build   最有显示这样代表没有问题啦Done, without errors.Execution Time (2014-11-22 17:38:12 UTC)concurrent:dist     5.4s  ▇▇▇▇▇▇ 13%autoprefixer:dist  770ms  ▇ 2%ngAnnotate:dist    716ms  ▇ 2%copy:dist          711ms  ▇ 2%requirejs:dist     11.8s  ▇▇▇▇▇▇▇▇▇▇▇▇ 27%cdnify:dist        13.3s  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 31%uglify:generated   10.1s  ▇▇▇▇▇▇▇▇▇▇ 23%Total 43.3s

项目已经可以跑起来了,如果配置中有什么问题欢迎留言评论,本人第一次写博客,共同成长共同进步

Yeoman+Requirejs