用grunt构建seajs项目

这篇博客详细介绍了如何使用grunt构建seajs项目。内容包括seajs和node的模块加载规则对比,seajs的模块标识类型,项目结构,grunt插件的准备,构建过程中的transport、concat、uglify和clean步骤,以及如何区分开发环境和生产环境。重点强调了目录结构和module_id的一致性在构建过程中的重要性。
摘要由CSDN通过智能技术生成

重要的链接

关于SeaJS的模块标识

SeaJS的配置

CommonJS模块标识规范

cmdjs spec

SeaJS的一个step by step教程,已经过期,仅供参考

ID和路径匹配原则

为什么有约定和构建工具

模块的加载启动

grunt-cmd-transport官方文档

grunt-cmd-concat官方文档

node的模块加载规则

为了通过对比,加深对seajs模块加载规则的理解,本文也介绍一下node的模块加载规则

node和seajs一样,实现的都是CommonJS的module spec,所以概念上也基本一致。有2种模块标识,分别是top-level identifier和relative identifier

如下代码:

require("http");
require("mongo");

都是top-level,不以../,./,/开头,如果是http这样的核心模块,就从node的lib目录加载,如果是mongo这样的第三方模块,则沿着目录树依次查找node_modules,直到/node_modules,如果没有找到则报错

如下代码:

require("./hello");
require("../hello");
require("/hello");

都是relative,则相对于当前模块的路径查找,比如:

//  /home/test/a.js
require("./b");// 加载/home/test/b.js

上面就是node的模块路径解析规则,非常简单

seajs的模块加载规则和模块标识

关于seajs的模块标识,强烈建议一定要仔细读一下这2篇文档:

seajs模块标识

ID和路径匹配规则

基本上,seajs的模块标识也分为top-level和relative,但是seajs是运行在浏览器环境的module loader,所以比起node,还多了一种解析规则,称为“普通路径”

top-level

类似于这样:

require("path/to/file");

和node中一样,不以../,./,/开头的标识,是顶级标识,将 相对于seajs base路径来解析,seajs base是sea.js文件本身加载的路径,如:

// seajs_test/app/index.html

<script src="../dist/3rd-lib/sea.js"></script>

在index.html页面中加载了sea.js,所以sea.js的加载路径是seajs_test/dist/3rd-lib/sea.js,所以默认的 seajs base是seajs_test/dist/3rd-lib

刚才这段代码:

require("path/to/file");


解析后的路径是seajs_test/dist/3rd-lib/path/to/file.js

不过可以配置seajs base,代码是:

// seajs_test/app/index.html

seajs.config({
        base: "../dist" // set base to seajs_
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值