grunt-cmd-transport提取deps[]的BUG
该BUG已经在GitHub上提了issue,详见:#56
文件
// employee/static/adder.js
define(function (require, exports) {
exports.add = function (a, b) {
return a + b;
}
});
// employee/static/package.js,该文件作为employee模块的唯一出口
define(function (require, exports) {
exports.adder = require("./adder");
});
// bootstrap/static/main.js
define(function (require) {
var adder = require("employee/static/package").adder;
alert(adder.add(1, 2));
});
BUG描述
执行grunt transport之后,提取的bootstrap/static/main.js变成:
// bootstrap/static/main.js
define("bootstrap/static/main", [ "employee/static/package", "employee/static/adder" ], function(require) {
var adder = require("employee/static/package").adder;
alert(adder.add(1, 2));
});
提取的employee/static/package.js是:
// employee/static/package.js
define("employee/static/package", [ "./adder" ], function(require, exports) {
exports.adder = require("./adder");
});
可以看到,package.js的提取结果是正确的,但是main.js的deps[]里,多了不应该存在的employee/static/adder,实际上期待的main.js应该是:
define("bootstrap/static/main", [ "employee/static/package" ], function(require) {
var adder = require("employee/static/package").adder;
alert(adder.add(1, 2));
});
尝试用spm-build来构建,得到的main.js就是上述期待的结果
这造成的结果是,在seajs.use("bootstrap/static/main")之后,浏览器会请求employee/static/adder.js,但是这个文件实际上不存在
规避方法
最好的办法当然还是grunt-cmd-transport修复这个BUG。在修复之前,可以在concat中将include配置为all,暂时规避此BUG
// Gruntfile.js
concat: {
options: {
paths: [buildDir],
include: 'all'
},
build: {
files: [
{
expand: true,
cwd: buildDir,
src: ['**/package.js', '**/package-debug.js', '**/main.js', '**/main-debug.js'],
dest: finalDir
}
]
}
}
这样虽然transport提取的中间文件的deps[]还是错的,但是concat main.js会把所有的依赖都合并进来:
// bootstrap/static/main.js,这次把所有的依赖都合并进来了
define("bootstrap/static/main", [ "employee/static/package", "employee/static/adder" ], function(require) {
var adder = require("employee/static/package").adder;
alert(adder.add(1, 2));
}); define("employee/static/package", [ "./adder" ], function(require, exports) {
exports.adder = require("./adder");
}); define("employee/static/adder", [], function(require, exports) {
exports.add = function(a, b) {
return a + b;
};
});
再用浏览器访问:
可以看到,因为main.js里面已经全部都有了,所以不会再发起额外的http请求(连employee/static/package.js都不请求)。这个方法可以规避这个BUG,但是seajs异步加载的特性就浪费了,只能期待transport插件尽快修复此BUG
grunt-cmd-transport提取deps[]的BUG的更多相关文章
- 安装好grunt,cmd 提示"grunt不是内部或外部命令" 怎么办?
Grunt和所有grunt插件都是基于nodejs来运行的,因此,必须安装node.js. (一) 去官网http://nodejs.org/ 下载安装包 node-v6.9.2.msi,直接点击安装 ...
- cmd提取时间格式(小时)问题以及Windows系统语言判断
你在这里看到了我的现在的时间是01:15,没错正在做个开发,本来好好的,结果一运行,直接报错: 这里就是时间中的获取小时出了问题,之前23点那会已经调试通过了,过那时是没有问题的,那么这时发生了什么? ...
- grunt任务之seajs模块打包
grunt与seajs grunt是前端流行的自定义任务的脚手架工具,我们可以使用grunt来为我们做一些重复度很高的事情,如压缩,合并,js语法检查等.通过定义grunt的配置文件Gruntfile ...
- Grunt打包之seajs项目【转】
原文:http://www.cnblogs.com/accordion/p/4508154.html grunt与seajs grunt是前端流行的自定义任务的脚手架工具,我们可以使用grunt来为我 ...
- 折腾一两天,终于学会使用grunt压缩合并混淆JS脚本,小激动,特意记录一下+spm一点意外收获
很长时间没有更新博客了,实在是太忙啦...0.0 ,以下的东西纯粹是记录,不是我原创,放到收藏夹还担心不够,这个以后常用,想来想去,还是放到这里吧,,丢不了..最后一句废话,网上搜集也好原创也罢,能解 ...
- grunt不是内部或外部命令错误处理
如题, npm install -g grunt-cli发现grunt命令却不可用, 其实是环境变量问题,但是网上很多给出的方法其实是不准确的, 正确方法,可以通过npm root -g查看路径,之后 ...
- ☀【SeaJS】SeaJS Grunt构建
如何使用Grunt构建一个中型项目?https://github.com/twinstony/seajs-grunt-build spmjshttp://docs.spmjs.org/doc/inde ...
- grunt打包过程中的注意点
1.安装nodeJS nodeJS下载地址: http://www.nodejs.org/download/ 2. 在Node.js command prompt 这个控制面板输入 npm i ...
- grunt入门讲解5:创建插件,安装Grunt以及常见问题
创建插件 创建插件主要有以下几个步骤: (1)通过 npm install -g grunt-init 命令安装 grunt-init .(2)通过 git clone git://github.co ...
随机推荐
- BZOJ3459 : Bomb
二分答案,转化成判定所有科学家能否在lim时间内走到安全的地方 考虑网络流,对于每个非叶子节点,S向它连边,容量为该点科学家的人数 对于每个叶子节点,向T连边,容量为该点的容量 对于每个非叶子节点x, ...
- Codeforces Round #404 (Div. 2) A - Anton and Polyhedrons 水题
A - Anton and Polyhedrons 题目连接: http://codeforces.com/contest/785/problem/A Description Anton's favo ...
- Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors
Implementation of Serial Wire JTAG flash programming in ARM Cortex M3 Processors The goal of the pro ...
- LINUX 内核 API
http://www.compsoc.man.ac.uk/~moz/kernelnewbies/documents/kdoc/kernel-api/linuxkernelapi.html
- bash 脚本中分号的作用
在Linux bash shell中,语句中的分号一般用作代码块标识 1.单行语句一般要用到分号来区分代码块.比如: weblogic@pmtest:/$if [ "$PS1" ] ...
- C# 地磅串口编程
C# 地磅串口编程 http://www.cnblogs.com/cancer_xu/archive/2012/09/14/WeighBridge-Com.html http://www.cnblog ...
- How do I debug a published XBAP file in VS2010?
I need to debug a full-trust application either by specifying a URL or, ideally, from within the web ...
- 关闭Delphi的RTTI
{$IF CompilerVersion >= 21.0}{$WEAKLINKRTTI ON}{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS( ...
- div与span区别及用法
DIV与SPAN区别及div与san用法篇 接下来了解在div+css开发的时候在html网页制作,特别是标签运用中div和span的区别及用法.新手在使用web标准(div css)开发网页的时候, ...
- iReport数据库连接找不到驱动