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 ...
随机推荐
- 【原】Maven解决jar冲突调试步骤:第三方组件引用不符合要求的javassit导致的相关异常
[环境参数]开发框架:Spring + MyBatis + SpringMVC + KettleJDK版本:1.8.0_91javassist依赖版本:javassit-3.12.1.GA [障碍再现 ...
- setInterval 和 setTimeout
setInterval 和 settimeout的区别 setinterval 1.会造成某些间隔会被跳过2.多个定时器之间的执行代码事假间隔比预期的小 而且 当定时器代码添加到任务队列里面没有被执行 ...
- 用SWD调试接口测量代码运行时间 ( SWO )
用SWD调试接口测量代码运行时间 关于时间测量的种种问题 在嵌入式中,我们经常需要测量某段代码的执行时间或测量事件触发的时间,常规的思路是: 1:在测量起始点,反转电平2:在测量结束点,再次反转电平 ...
- 孕龙逻辑分析仪 ZeroPlus Logic Analyzer
Voltage Translation for Analog to Digital Interface ADC http://openschemes.com/2010/03/23/zeroplus-l ...
- 使用Axure RP原型设计实践02,自定义部件以及熟悉与部件相关面板
本篇体验在Axure中自定义部件,并熟悉Widget Interations and Notes面板,Widget Properties and Style面板,Widget Manager面板. 在 ...
- 利用npm 安装删除模块
转自 涵一原文 利用npm 安装删除模块 1. npm安装模块 [npm install xxx]利用 npm 安装xxx模块到当前命令行所在目录:[npm install -g xxx]利用npm安 ...
- xcode调试查看变量的值
对于IPhone开发/XCode的初学者,如何在调试时查看变量的值是很头痛的事情.因为Xcode的expression 经常无法正确显示变量的值.但是强大的GDB可以很方便的帮我们查看变量的值. 当执 ...
- ArcEngine设置有牵引线的标注
来自:https://blog.csdn.net/u011609113/article/details/51372827/ 在ArcGIs中很容易就能设置带有牵引线的标注. 在ArcEngine中 ...
- 解决sublime text 3中文乱码问题
解决中文乱码,需要安装两个插件 一.安装Codecs Ctrl+Shift+P 输入Install Package-->Codecs 二.安装gbk support 菜单:preferences ...
- 商业web漏扫神器——appscan篇
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/dongfei2033/article/details/78472507 很快,已经到了三大商业漏 ...