// 多个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. Dubbo理论知识

    本文是作者根据官方文档以及自己平时的使用情况,对 Dubbo 所做的一个总结.如果不懂 Dubbo 的使用的话,可以参考我的这篇文章<超详细,新手都能看懂 !使用SpringBoot+Dubbo ...

  2. watir-webdriver使用过程中异常

    1.在jruby版本1.6.7中,报异常:not such file to load --watir-webdriver 解决方法 :在文件的首行添加:require 'rubygems'       ...

  3. P1201 [USACO1.1]贪婪的送礼者Greedy Gift Givers

    题目描述 对于一群(NP个)要互送礼物的朋友,GY要确定每个人送出的钱比收到的多多少.在这一个问题中,每个人都准备了一些钱来送礼物,而这些钱将会被平均分给那些将收到他的礼物的人.然而,在任何一群朋友中 ...

  4. 在自己的linux服务器上面部署ShowDoc

    ShowDoc就是一个非常适合IT团队的在线文档分享工具,使用的是一款非常轻量级的关系数据库系统SQLite,支持多数SQL92标准.它可以加快团队之间沟通的效率. 但是把所有的接口文档写在第三方的服 ...

  5. CSS选择器手册

    CSS选择器手册 选择器       选择器名称         例子 例子描述 CSS E.class 类选择器 E.intro 选择 class="intro" 的所有E元素. ...

  6. Java MVC 增删改查 实例

    需求:实现增加新部门的功能,对应数据库表示Oracle的dept表 一.Java MVC 增 实现: 1.视图层(V):注册部门 deptAdd.jsp 在注册新部门页面只需输入“部门名称”和“城市” ...

  7. SIT&UAT

  8. windows下jdk环境变量配置

    JAVA_HOMEC:\Program Files\Java\jdk1.8.0_131 JMETER_HOMEC:\jmeter\jmeter3.2 CLASSPATH%JAVA_HOME%\lib; ...

  9. js 字符串常用操作

    function Class_String_Common(){ //将字符串 myString 的 start位置 和 end位置 之间的内容替换为 replaceStr this.replace1 ...

  10. write命令

    write——给用户发信息,以Ctrl+D保存结束 命令所在路径:/usr/bin/write 示例1: # write xiaohua 执行命令后可以输入需要发送的信息,如下: 同时xiaohua收 ...