require.js的使用心德:

都是自我的理解所得:

first:为什么使用?

1,web开发js的占用比例越来越大,引入的插件也越来越多,维护困难,一个一个的script的写要废

2,模块开发的需求

3,有时候javascript的运用是有依赖的需求的,大量的使用难以保证依赖顺序,出现不存在的问题

second:这是个坑,使用前的提示:

使用的环境是服务器的web环境,单纯的没有服务器的静态页面使用根本没有反应!

[][][]还有最重要的一点是,所有的路径,出了加/的,若是寻相对路径,都是以baseUrl为基础的???这个待验证![][]]

third:废话不多说,直接上图片:

step:首先是目录结构:

index.html是我的页面,这个require是一个服务器的根目录,require是require.js的库

step2:主要的index.html的样子:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>this in index</title>
  6. <div id="modle">asdafdfad</div>
      <!--注意:src是require的库,defer是ie异步,async是异步,data-main是js入口文件,config,主要的require.config都在里面写各种调用-->
  7. <script src="require.js" defer async="true" data-main='config' ></script>
  8. </head>
  9. <body>
  10. <h1>this is index</h1>
  11. </body>
  12. </html>

step3的config.js文件如下:

  1. require.config({
  2. paths:{
  3. a:'lib/a',
  4. b:'lib/b',
  5. c:'others/c',
  6. jQuery:'lib/jquery.min'
  7. },
  8. waitSeconds:5,
    //jquery等各种外部库要使用,当要如此,是做兼容的
  9. shim:{
  10. jQuery:{
  11. exports:'$'
  12. }
  13. }
  14. })
  15.  
  16. require(['a','b','c','jQuery'],function(a,b,c,$){
  17. a.a();//输出this is module a
  18. b.b();//输出this is module b
  19. c.c();//输出this is module c in others
  20. console.log(c.c2);//有时候有时候我会相信一切有尽头
  21. a.show();//背景变红
  22. $('#modle').html('d');//文本变为d
  23. })

各个模块文件如下:a.js

  1. define(['jQuery'],function($){
  2. function a(){
  3. console.log('this is module a ');
  4. }
  5. function jqueryShow(){
  6. $('#modle').css('background','red');
  7. }
  8. return {
  9. a:a,
  10. show:jqueryShow
  11. }
  12. })

b.js

  1. define(function(){
  2. return {
  3. b:function(){
  4. console.log('this is module b');
  5. },
  6. care:function(){
  7. console.error('刚刚引入的jquery不是一个模块,不能在define处搞');
  8. }
  9. }
  10. })

c.js

  1. define([],function(){
  2. return {
  3. c:function(){
  4. console.log('this is module c in others');
  5. },
  6. c2:'有时候有时候我会相信一切有尽头!'
  7. }
  8. })

//后来在发现的一些坑

后来发现他的那个baseUrl的坑有点多呀什么情况呢?

坑之一:baseUrl如果没有设定,那会默认为加载data-main的路径,如果在config(main)中申明了,就是它,都没有,那就是require.js所在路径,paths的设定相对路径都是它位参考的,模块的引入require和define自然也是以config(main)中的baseUrl为参考的相对路径(如:baseUrl:'/js/modle',那么意思就是所有的相对路径都是以modle目录里面为参考),但是baseUrl什么时候不起作用呢?就是用了/(根目录符号开头),http开头的路径和....js结尾的,这么一想还是很人性的哈!

坑之二:如果有多个的入口文件,那么,就不能申明data-main在标签中了,就得在各个页面中分别写require.config({}),但是又有个问题了,什么问题呢?就是啊,如果引入require.js时候是defer async='true' 那么后面的require.config会说没有定义,所以,引入require.js的标签一般都不写前面的defer async='true'了.也是醉了

require.js的使用的坑!的更多相关文章

  1. 记录:sea.js和require.js配置 与 性能对比

    最近有点忙,很久无写博客,记录一下之前的配置require.js和sea.js的配置.(有误有望提出 require.js 文件目录 /app(项目使用js) /lib(require.js jq存放 ...

  2. Require,js配置使用心得

    首先大家要知道requirejs是干嘛用的,要解释,那就用一句话说下:RequireJS是一个JavaScript文件和模块加载器接下来我们开始学会配置使用requireJs,当然在学习使用的过程中也 ...

  3. Javascript模块化编程(三):require.js的用法

    Javascript模块化编程(三):require.js的用法 原文地址:http://www.ruanyifeng.com/blog/2012/11/require_js.html 作者: 阮一峰 ...

  4. javascript模块化编程(三):require.js用法

    本文来自阮一峰 这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js. 一.为什么要用require ...

  5. require.js工作原理(初始)

    详情:请见阮一峰老师的日志:http://www.ruanyifeng.com/blog/2012/11/require_js.html: 导入:<script data-main=" ...

  6. Javascript模块化编程(三):require.js的用法(转)

    这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js. 一.为什么要用require.js? 最早的 ...

  7. require.js源码分析

    写的寥寥草草,博客园的布局怎么弄还没有研究,再保存一份草稿,日后在完善,深度研究 require.js 加载顺序 1:加载html主页,require.js文件 2:脚本执行到html中的script ...

  8. Angular.JS + Require.JS + angular-async-loader 来实现异步加载 angular 模块

    传统的 angular 应用不支持异步加载模块,必须在 module 启动的时候,所有模块必须预加载进来. 通过使用 angular-async-loader 库,我们可以使用 requirejs 等 ...

  9. require.js

    日期: 2012年11月 7日 http://www.ruanyifeng.com/blog/2012/11/require_js.html 这个系列的第一部分和第二部分,介绍了Javascript模 ...

随机推荐

  1. ECommon.Dapper

    ECommon.Dapper 轻量级的dapper扩展 我们都知道Dapper这个orm框架,但是我们也知道他的扩展目前没有特别好的,今天我就推荐一个轻量级的很方便使用的一个扩展叫做 ECommon. ...

  2. Ruby自学笔记(五)— 条件判断

    条件判断,在编程语言中都存在,而Ruby中的条件判断和Java中类似,当然还是存在些许差别 Ruby中条件判断的条件: 1) 可以使用 ==,<,>等比较运算来作为条件,比较运算可以返回t ...

  3. MySql可视化工具MySQL Workbench使用教程

    1. MySQL Workbench MySQL Workbench 为数据库管理员.程序开发者和系统规划师提供可视化的Sql开发.数据库建模.以及数据库管理功能. 2.MySQL Workbench ...

  4. List of XML and HTML character entity references

    A character entity reference refers to the content of a named entity. An entity declaration is creat ...

  5. WEB工程数据库相关安装脚本写作

    1. 数据库oracle安装 2. 数据库用户创建,表空间创建,表创建 #!/bin/bash current_path=`pwd` create_tablespace=${current_path} ...

  6. ioc开发学习 --简易计时器 (基于iPhone5屏幕尺寸开发)

    超简单的秒表:包含:开始.暂停(不清零).清零 方法 核心代码 // // ViewController.m // MiaoBiao // // Created by Ibokan on 15/8/1 ...

  7. Inno Setup安装时不能关闭指定进程

    脚本由 Inno Setup 脚本向导 生成!; 有关创建 Inno Setup 脚本文件的详细资料请查阅帮助文档! #define MyAppName "XX管理系统"#defi ...

  8. 使用eclipse搭建嵌入式开发环境

    下载jdk http://download.oracle.com/otn-pub/java/jdk/7u4-b20/jdk-7u4-linux-i586.tar.gz 下载eclipse-cpp-ga ...

  9. FFT(快速傅立叶变换):HDU 1402 A * B Problem Plus

    Calculate A * B. Input Each line will contain two integers A and B. Process to end of file. Note: th ...

  10. 后缀数组:HDU1043 Longest Common Substring

    Longest Common Substring Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...