// 多个js压缩成一个js
// Project configuration.
module.exports = function(grunt) {
// 使用严格模式
'use strict'; // 这里定义我们需要的任务
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
requirejs : {
build : {
options : {
baseUrl : './',
name:'./js/config/main', //主文件名字
optimize:'uglify', //指定压缩工具类型 使用uglify工具压缩
mainConfigFile: './js/config/config.js', //require 的主文件
out:'./assets/js/<%= pkg.name %>2.min.js' //压缩后的文件
//其他无需指定 本插件会自动寻找require引进的所有文件
}
}
},
concat : {
css : {
src : ['dist/css/*.css'],
dest : 'dist/css/<%= pkg.name %>.css'
}
},
cssmin: {
options: {
keepSpecialComments: 0
},
compress: {
files: {
'assets/css/<%= pkg.name %>.min.css': ['dist/css/<%= pkg.name %>.css']
}
}
},
// 设置任务,删除文件夹
clean: {
dist: 'dist'
}, // 通过sass编译成css文件
sass: {
dist: {
files: [{
expand: true,
cwd: 'scss',
src: ['*.scss'],
dest: 'dist/css',
ext: '.css'
}]
}
},
// 检测改变,自动跑sass任务
watch: {
scripts: {
files: ['scss/*.scss','js/*.js','js/*/*.js','assets/css/*.css'],
tasks: ['sass','concat','cssmin'],
options: {
spawn: false
}
}
} });
grunt.loadNpmTasks('grunt-contrib-requirejs');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-cssmin');
// 一定要引用着3个模块
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-contrib-watch');
// 把需要跑的任务注册到default这里每次运行grunt的时候先删除dist,然后重新编译,最后监测文件夹的情况。
grunt.registerTask('default', ['clean:dist', 'sass:dist','requirejs','concat', 'cssmin', 'watch']);
};

利用requirejs在当前页面调用JS加载并执行

<script data-main="./js/news.js"   defer="" async="true" src="./lib/js/require.js"></script>

问题1:1.模块压缩后无法加载。 就是require的参数 ,被替换成随机参数,冲突

  解决:应该定义子模块:eg:定义一个util模块

define(function () {
var util = {
con:function(){
alert(ff);
}
}; util.browserTips();
return util;
});

配置公共模块:

define(function () {
require.config({
paths: {
'jquery': 'http://wap.bdline.com/lib/js/jquery-1.7.2.min',
'swiper': 'http://wap.bdline.com/lib/js/swiper2.min',
'util': 'http://wap.bdline.com/js/util' //将定义的util模块作为公共模块
},
shim: {
'util': ['jquery']
}
});
});

调用公共模块

require(['http://wap.bdline.com/js/config/config.js'], function () {
require(['jquery','swiper','util'], function ($, swiper, util) {
//此处写执行代码
alert(util); });
});

2.如何做到每个页面按需加载模块,并将当前页面用到的模块,压缩到同一个文件夹里。 又要避免重复加载问题。

-----------------------------

grunt配置文件如下:

// 多个js压缩成一个js
// Project configuration.
module.exports = function(grunt) {
// 使用严格模式
'use strict'; // 这里定义我们需要的任务
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
requirejs : {
build : {
options : {
baseUrl : './',
name:'./js/config/main', //主文件名字
optimize:'uglify', //指定压缩工具类型 使用uglify工具压缩
mainConfigFile: './js/config/config.js', //require 的主文件
out:'./assets/js/<%= pkg.name %>2.min.js' //压缩后的文件
//其他无需指定 本插件会自动寻找require引进的所有文件
}
}
},
uglify: {
options: {
},
dist: {
files: {
'dist/js/index.js': ["js/index.js"],
'dist/js/about.js': ["js/about.js"],
'dist/js/news.js': ["js/news.js"],
'dist/js/help.js': ["js/help.js"]
}
}
},
concat : {
css : {
src : ['./lib/bootstrap/css/bootstrap.min.css','./lib/css/common.css','./lib/css/swiper2.css','dist/css/*.css'],
dest : 'dist/css/<%= pkg.name %>.css'
}
},
cssmin: {
options: {
keepSpecialComments: 0
},
compress: {
files: {
'assets/css/<%= pkg.name %>.min.css': ['dist/css/<%= pkg.name %>.css']
}
}
},
// 设置任务,删除文件夹
clean: {
dist: 'dist'
}, // 通过sass编译成css文件
sass: {
dist: {
files: [{
expand: true,
cwd: 'scss',
src: ['*.scss'],
dest: 'dist/css',
ext: '.css'
}]
}
},
// 检测改变,自动跑sass任务
watch: {
scripts: {
files: ['./js/*.js','./dist/js/*.js','./assets/js/*.js'],
tasks: ['uglify'],
options: {
spawn: false
}
},
csss: {
files: ['./lib/css/*.css','./dist/css/*.css','./assets/css/*.css'],
tasks: ['concat','cssmin'],
options: {
spawn: false
}
},
sass: {
files: ['scss/*.scss'],
tasks: ['sass'],
options: {
spawn: false
}
},
require: {
files: ['./js/config/*.js'],
tasks: ['requirejs'],
options: {
spawn: false
}
}
} });
grunt.loadNpmTasks('grunt-contrib-requirejs');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-cssmin');
// 一定要引用着3个模块
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-contrib-watch');
// 把需要跑的任务注册到default这里每次运行grunt的时候先删除dist,然后重新编译,最后监测文件夹的情况。
grunt.registerTask('default', ['clean:dist', 'sass:dist','uglify','requirejs','concat', 'cssmin', 'watch']);
};

文件结构如下:

备注:

//grunt+requirejs
js: 此为原文件js(本地写代码时,文件引用此处代码,便于调试)
dist/css:由sass转化之后的样式,(本地测试用。css:dist/css 为scss生成的,压缩为assets/css)
dist/js:压缩之后的文件(上线时调用)
assets/js为压缩后的js(仅为首页js,上线时调用)
assets/css/linkongfront.min.css 全部css按顺序压缩之后。上线样式只调用这一个便可。这个文件不会自动更改 。需要手动grunt一下
lib:是一些模块和库

注意:
首页js是 js/config/main 压缩成的 ./assets/js/linkongfront.min.js
上线时:assets,dist/js,images,lib,html即可

大体思路:库每个页面按需引入

上线时替换成:<link href="./assets/css/linkongfront.min.css" rel="stylesheet">
<script type="text/javascript" src='./assets/js/linkongfront.min.js'></script>

测试js:
<script type="text/javascript" charset="utf-8" src="./lib/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" charset="utf-8" src="./lib/js/swiper2.min.js">
</script>
<script type="text/javascript" charset="utf-8" src="./lib/js/fastclick.js"></script>
<script type="text/javascript" charset="utf-8" src="./testjs/util.js"></script>
<script type="text/javascript" charset="utf-8" src="./testjs/index.js"></script>

grunt与requirejs结合使用的更多相关文章

  1. 使用grunt完成requirejs的合并压缩和js文件的版本控制

    最近有一个项目使用了 requirejs 来解决前端的模块化,但是随着页面和模块的越来越多,我发现我快要hold不住这些可爱的js文件了,具体表现在每个页面都要设置一堆 requirejs 的配置( ...

  2. Grunt 之 RequireJS

    RequireJs 提供了一个打包工具 r.js,可以将相关的模块打包为一个文件.相关说明:http://www.requirejs.org/docs/optimization.html 将相关的脚本 ...

  3. 前端打包构建工具grunt快速入门(大篇幅完整版)

    打包的目的和意义就不用叙述了直接上干货 http://www.gruntjs.net/getting-started里面的教程也太简单了,需要下一番功夫去研究才行.本文将grunt打包的常用方法都用实 ...

  4. 【grunt整合版】30分钟学会使用grunt打包前端代码

    grunt 是一套前端自动化工具,一个基于nodeJs的命令行工具,一般用于:① 压缩文件② 合并文件③ 简单语法检查 对于其他用法,我还不太清楚,我们这里简单介绍下grunt的压缩.合并文件,初学, ...

  5. 【grunt第二弹】30分钟学会使用grunt打包前端代码(02)

    前言 上一篇博客,我们简单的介绍了grunt的使用,一些基础点没能覆盖,我们今天有必要看看一些基础知识 [grunt第一弹]30分钟学会使用grunt打包前端代码 配置任务/grunt.initCon ...

  6. 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore

    本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...

  7. 使用grunt打包前端代码

    grunt 是一套前端自动化工具,一个基于nodeJs的命令行工具,一般用于:① 压缩文件② 合并文件③ 简单语法检查 对于其他用法,我还不太清楚,我们这里简单介绍下grunt的压缩.合并文件,初学, ...

  8. Grunt 插件使用汇总

    最近使用了很多 Grunt 插件,这里把使用 Grunt 中涉及的从开发.代码检查.单元测试.E2E 测试,直到发布所涉及的插件,做一个比较完全的汇总. 环境搭建 1. 创建 Web 前端开发环境 2 ...

  9. H5单页面架构:backbone + requirejs + zepto + underscore

    首先,来看看整个项目结构. 跟上一篇angular类似,libs里多了underscore和zepto.三个根目录文件: index.html:唯一的html main.js:requirejs的配置 ...

随机推荐

  1. 详解JS作用域(一)

    一.什么是作用域 存储和访问变量,是任何一种编程语言最基本的功能之一,变量存在哪里?程序需要时如何找到它?这些问题需要一套良好的规则来规范,这套规则,就成为作用域. 二.编译原理 js通常归类为解释语 ...

  2. Unix高级环境编程之fcntl函数

    #include <fcntl.h> int fcntl(int fd, int cmd, ...) fcntl功能 复制一个现有的描述符 (cmd = F_DUPFD) ##### 返回 ...

  3. Promise/A+规范

    1.什么是Promise? Promise是JS异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步编程解决方案之一 2.对于几种常见异步编程方案 回调函数 事件监听 发布/ ...

  4. google kickstart 2018 round D A Candies

    思路: 对于small数据,由于求和及奇数数量两个限制条件均满足区间单调性,可以直接使用尺取法(滑动窗口法)求解. 对于large数据,奇数数量依然是满足区间单调性的.首先使用尺取法,找到所有满足奇数 ...

  5. 详解HTML中的表格标签

    详细代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...

  6. PeopleSoft FSCM Production Support 案例分析之一重大紧急事故发生时的应对策略

    案例背景: 今天一大早用户打电话来讲昨天上传的银行的forex payment return file好像没有被处理到,我一听就觉得纳闷,因为昨天晚上operator也没有给我打电话啊(如果有job ...

  7. Java面试题全集(下)

    这部分主要是开源Java EE框架方面的内容,包括hibernate.MyBatis.spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试题, ...

  8. UVA 1151 Buy or Build (最小生成树)

    先求出原图的最小生成树,然后枚举买哪些套餐,把一个套餐内的点相互之间边权为0,直接用并查集缩点.正确性是基于一个贪心, 在做Kruskal算法是,对于没有进入最小生成树的边,排序在它前面的边不会减少. ...

  9. HDU 6166 Senior Pan(多校第九场 二进制分组最短路)

    题意:给出n个点和m条有向边(有向边!!!!我还以为是无向查了半天),然后给出K个点,问这k个点中最近的两点的距离 思路:比赛时以为有询问,就直接丢了,然后这题感觉思路很棒,加入把所有点分成起点和终点 ...

  10. Spring-2-官网学习

    spring生命周期回调 结合生命周期机制(官网提供) 1.实现InitializingBean接口重写void afterPropertiesSet() throws Exception;方法 使用 ...