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 ...
随机推荐
- 移动前端开发和 Web 前端开发的区别是什么
可以分成两部分理解1.服务器端开发,也叫后台开发,这是唯一的,对应不同的平台,他负责数据的分发与存储,和一些逻辑的处理.逻辑处理的多少由业务的复杂程度决定.服务端相对独立,与平台没啥关系. 2..1中 ...
- A CANBus Tiny Network without Transceiver ICs : STM32F4 Discovery
Sometimes you have a CAN equipped processor on a low cost board but it has no CAN transceiver chips. ...
- STM32CubeF4 FreeRTOS Examples don't work correctly with HAL_GetTick
because the SysTick ISR has been assigned to the FreeRTOS xPortSysTickHandler() function without reg ...
- Android WebView加载Html右边空白问题的解决方案
用WebView显示Html时,右边会出现一条空白区,如下图所示: 最开始的时候,认为是网页本身的空白. 后来发现网页本身无问题,且这个空白区是跟Scroll Bar 的位置和粗细比较相符,于是去控制 ...
- 使用Axure RP原型设计实践03,制作一个登录界面的原型
本篇体验做一个登录界面的原型. 登录页 首先在Page Style里为页面设置背景色. 如果想在页面中加图片,就把Image部件拖入页面,并设置x和y轴.双击页面中的Image部件可以导入图片.在Im ...
- 玩一下C#的语音识别
在.NET4.0中,我可以借助System.Speech组件让电脑来识别我们的声音. 以上,当我说"name",显示"Darren",我说"age&q ...
- Cannot subclass final class class com.sun.proxy.$Proxy
背景 这个错误是我在使用AOP动态切换数据库,实现数据库的读写分离的时候出现的问题,使用到的系统环境是: <spring.version>3.2.6.RELEASE</spring. ...
- HikariCP 脑火Failed to obtain JDBC Connection: You need to run the CLI build and you need target/classes in your classpath to run.
测试了一下 HikariCP 连接池报错,无解 十一月 16, 2017 5:31:59 下午 org.apache.catalina.core.StandardContext loadOnStart ...
- Java web实时进度条整个系统共用(如java上传、下载进度条、导入、导出excel进度条等)
先上图: 文件上传的: 2017-05-04再次改进.在上传过程中用户可以按 Esc 来取消上传(取消当前上传,或者是全部上传)... 2019-03-26更新进度条显示体验 从服务器上压缩下载: 从 ...
- Linux为sh脚本文件添加执行权限
chmod是权限管理命令change the permissions mode of a file的缩写..u代表所有者,x代表执行权限. + 表示增加权限.chmod u+x file.sh 就表示 ...