r.js结合gulp等于webpack(angular为例)

本人大学时玩dojo,开始了AMD模块化的不归路,工作后一直使用requirejs,感觉非常好。但是,近来随着react的火热,webpack成为了天下无敌的模块化工具,能做模块化,合并压缩,监视等,当我看见webpack甚至还能做反向代理的时候,我整个人都不好了。我已经打算从requirejs转向webpack了,在重构以前老代码的时候,我想记录下历史。使用r.js结合gulp同样可以实现webpack的绝大部分功能。

例子

源代码地址:https://github.com/lewis617/daily-task

例子比较弯弯绕,不适合angular和requirejs的新手看,但是可以只关注思路。

写的是一个任务管理系统,包括用户系统,任务的crud等功能。

组件(components)

angular的组件指的是指令、过滤器、服务等,在这个例子中,我自己编写了若干个组件,包括一个延迟加载工具、一个等待指令、一个确认框、一个wilddog工具模块(里面包含了若干个我能用到的服务),都是我平时经常复用的组件,直接复制文件夹过去就能用。

还包括一些第三方的组件比如,angular-route,angular-ui等,都是直接用bower安装的。跟我自己写的组件原理是一样的哈哈,只不过最后用了一个module打包起来。

模块(modules)

就是按页面划分的功能模块,包括登录、主页、账户、任务四个模块。每个模块都包括config路由,controller,html页面等。

开始打包

npm install requirejs后可以使用r.js了,我们直接使用r.js命令行工具也可以,但是无法实现监视代码变动的功能,所以我们引入gulp来实现监视功能,其他的合并压缩均使用requirejs来实现。

gulpfile.js

var gulp = require(‘gulp‘);
var rjs = require(‘requirejs‘);

var paths = {
  scripts: [‘modules/**/*.js‘, ‘modules/**/**/*.js‘,‘main.js‘]
};

gulp.task(‘build‘, function(cb){
  rjs.optimize({
    baseUrl: "./",
    mainConfigFile:"./main.js",
    name:‘main‘,
    out:‘./dist/build-main.js‘
  }, function(buildResponse){
    // console.log(‘build response‘, buildResponse);
    cb();
  }, cb);
});
// Rerun the task when a file changes
gulp.task(‘watch‘, function() {
  var watcher = gulp.watch(paths.scripts, [‘build‘]);
  watcher.on(‘change‘, function(event) {
    console.log(‘File ‘ + event.path + ‘ was ‘ + event.type + ‘, running tasks...‘);
  });
});

gulp.task(‘default‘, [‘build‘,‘watch‘]);

这个gulp配置文件就写了两个任务,一个是build一个是watch。build任务是直接把requirejs的入口文件(main.js)输入,指定输出目录,再指定配置文件(这里也是main.js),就可以合并压缩了。是不是非常简单。

watch任务就是监视代码变动,如果代码改变就自动合并压缩一次。

那么main.js里面究竟是什么呢?先贴出代码

main.js

‘use strict‘;
require.config({
    baseUrl:‘‘,
    paths: {
        ‘ngRoute‘:‘bower_components/angular-route/angular-route.min‘,
        ‘domReady‘:‘bower_components/domReady/domReady‘,
        ‘text‘:‘bower_components/text/text‘,
        ‘ui-bootstrap‘ : ‘bower_components/angular-bootstrap/ui-bootstrap-tpls.min‘,
        ‘angular-animate‘:‘bower_components/angular-animate/angular-animate.min‘,

        ‘routeConfig‘:‘components/routeConfig‘
    }
});

require([
    ‘domReady!‘,
    ‘modules/home/main‘,
    ‘modules/login/main‘,
    ‘modules/account/main‘,
    ‘modules/task/main‘
],function(){
    angular.module("myApp", [
        "myApp.home",
        "myApp.login",
        "myApp.account",
        ‘myApp.task‘
    ]).run([‘$rootScope‘, ‘Auth‘, function($rootScope, Auth) {
            // track status of authentication
            Auth.$onAuth(function(user) {
                $rootScope.loggedIn = !!user;
            });

            //alert列表以及关闭方法
            $rootScope.alerts = [];
            $rootScope.closeAlert = function(index) {
                $rootScope.alerts.splice(index, 1);
            };

        }]);

    angular.bootstrap(document,[‘myApp‘]);
});

这段代码包含两部分,第一部分是requirejs的配置部分,定义了几个假名而已;第二部分是requirejs的入口部分,主要是先加载一些模块,然后用在主module里面声明以来,最后用run方法,启动一些你需要启动的事件,最后的最后手动启动angular。

多米诺骨牌

本文并不打算写requirejs,但是可以简单说一下,requirejs以及其他所有的模块化工具都是一个多米诺骨牌,触发入口文件,继而引入所有的文件。示例程序中的组件和模块就是这样被引入的。将他们封装起来用文件夹打包,在以后的复用过程中,会非常好用!

比较webpack

这些功能webpack都具备,但是requirejs是可以不全部合并的,有些文件需要延迟加载,比如angular程序绝大多数都是SPA ,如果我们一开始就把所有的文件全部合并,势必会造成首次加载速度非常慢,那么如果我们使用requirejs就可以在改变路由时候延迟加载一些js文件,使得首次加载的js文件体积变小。使用webpack的话,恐怕不能直接实现这个功能,但是一定有相关的插件或者模块可以实现类似的。期待webpack,也感谢历史上那些曾经优秀的工具带给我们的便利,让我们码农的工作更加轻松!

时间: 2024-10-05 23:53:51

r.js结合gulp等于webpack(angular为例)的相关文章

【简单理解】gulp和webpack的区别

Gulp和Webpack的基本区别: gulp可以进行js,html,css,img的压缩打包,是自动化构建工具,可以将多个js文件或是css压缩成一个文件,并且可以压缩为一行,以此来减少文件体积,加快请求速度和减少请求次数:并且gulp有task定义处理事务,从而构建整体流程,它是基于流的自动化构建工具. Webpack是前端构建工具,实现了模块化开发和文件处理.他的思想就是“万物皆为模块”,它能够将各个模块进行按需加载,不会导致加载了无用或冗余的代码.所以他还有个名字叫前端模块化打包工具.

*模块加载器、Node.js、NPM、Webpack基础汇总

--------------------------------NODE应用中的Node.js command prompt和Node.js--------------------------------------- ·安装node.js后,有两个可启动应用:黑色的Node.js command prompt和绿色的Node.js ·黑色的Node.js command prompt就和cmd DOS控制台一样,输入node -v后,若出现node的版本号,则表示当前node环境安装OK. ·

gulp、webpack学习笔记

前言:这两天天学了gulp和webpack的基本使用方法,其实对于这些工具,了解基本的用法.熟悉一些常用配置和方法就足够日常使用了.更复杂的等到需要时才再查相关文档就可以了. gulp和webpack虽然有相似的功能,比如压缩.合并文件,但应该算是两种类型的工具. gulp作为自动化构建工具主要的功能就是自动压缩.css转换.合并资源文件,减少http请求,这些功能对于一般的前端项目而言已经足够使用了.而且使用起来也更加方便, 在gulpfile.js引入组件并创建任务便可以很方便的使用. 而w

gulp与webpack的区别

常有人拿gulp与webpack来比较,知道这两个构建工具功能上有重叠的地方,可单用,也可一起用,但本质的区别就没有那么清晰. gulp gulp强调的是前端开发的工作流程,我们可以通过配置一系列的task,定义task处理的事务(例如文件压缩合并.雪碧图.启动server.版本控制等),然后定义执行顺序,来让gulp执行这些task,从而构建项目的整个前端开发流程. PS:简单说就一个Task Runner webpack webpack是一个前端模块化方案,更侧重模块打包,我们可以把开发中的

[转]基于gulp和webpack的前端工程化

本文样例代码 :https://github.com/demohi/learning-gulp 本文主要简单介绍一下基于gulp和webpack的前端工程化. 技术栈 React.js reFlux Node.js 我们的需求 基于CommonJS模块化开发 基于React.js的组件化开发(JSX) 为保证组件的复用,css需要打包到js中 有国际化需求,静态文件需要部署在CDN上面 工程化工具的选择 gulp(基于stream的构建工具,与grunt相比,速度快且可编程) webpack(前

JavaScript自动化构建工具入门----grunt、gulp、webpack

蛮荒时代的程序员: 做项目的时候,会有大量的js 大量的css   需要合并压缩,大量时间需要用到合并压缩 在前端开发中会出现很多重复性无意义的劳动 自动化时代的程序员: 希望一切都可以自动完成 安装 常用插件.压缩插件.合并插件等.  用插件实现 功能无限扩展 简单介绍三种工具 grunt 是js任务管理工具(自动化构建工具)    -- Grunt官网 戳这里 优势:出来早 社区成熟  插件全 缺点:配置复杂   效率低 (cpu占用率高) -------------------------

Gulp和Webpack对比

在现在的前端开发中,前后端分离.模块化开发.版本控制.文件合并与压缩.mock数据等等一些原本后端的思想开始逐渐渗透到“大前端”的开发中.前端开发过程越来越繁琐,当今越来越多的网站已经从网页模式进化到了 Webapp 模式.它们运行在现代的高级浏览器里,使用 HTML5. CSS3. ES6 等更新的技术来开发丰富的功能,网页已经不仅仅是完成浏览的基本需求,并且Webapp通常是一个单页面应用(SPA),每一个视图通过异步的方式加载,这导致页面初始化和使用过程中会加载越来越多的 JavaScri

gulp和webpack的区别,是一种工具吗?

背景: 最近收到很多童鞋的问题:gulp和webpack 什么关系,是一种东西吗?可以只用gulp,不用webpack吗 或者反过来? 基于此问: 我简单归结了一下区别和概念,让需要的同学阅读理解,从而不把时间浪费到这种模糊不清的选择问题上! --------------------------------------------------------------------------------------------------------------------------------

前端开发自动化工作流工具:JavaScript自动化构建工具grunt、gulp、webpack介绍

前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为庞大和复杂,代码维护.打包.发布等流程也变得极为繁琐,同时浪费的时间和精力也越来越多,当然人为的错误也随着流程的增加而增加了更多的出错率.致使每一个团队都希望有一种工具,能帮助整个团队在开发中能精简流程.提高效率.减少错误率.随之讨论自动化部署也越来越多,并且国内很多大型团队也都有自己成熟的自动化部