Javascript Filesaver和requireJS:不匹配的匿名定义
我在客户端为用户保存JSON文件 使用RequireJS加载Filesaver JS时出错:Javascript Filesaver和requireJS:不匹配的匿名定义,javascript,requirejs,Javascript,Requirejs,我在客户端为用户保存JSON文件 使用RequireJS加载Filesaver JS时出错: Uncaught Error: Mismatched anonymous define() module: function () { return saveAs; } 我的requirejs优化器配置文件: require.config({ paths: { ... blobjs : "../../libs/blobjs
Uncaught Error: Mismatched anonymous define() module: function () {
return saveAs;
}
我的requirejs优化器配置文件:
require.config({
paths: {
...
blobjs : "../../libs/blobjs/Blob",
....
filesaver : "../../libs/filesaver/FileSaver",
},
shim : {
...
blobjs: {
exports: "Blob"
},
filesaver: {
exports: "Filesaver"
},
...
},
optimize: 'uglify2',
uglify2: {
output: { beautify: true },
beautify: { semicolons: false }
},
baseUrl : '../assets/js/',
mainConfigFile : '../assets/js/config.js',
name : 'formbuilder',
out : 'formbuilder.min.js',
output : { beautify: true },
preserveLicenseComments : false,
include : ['here i include some views template']
});
在我的代码中:
var blob = new Blob([jsonContent], {
type: "application/json;charset=utf-8"
});
saveAs(blob, collectionAndFilename['filename'] + '.json');
谢谢你的帮助我也有同样的问题。经过调查,我意识到我是在脚本标记中加载FileSaver文件的,因为在FileSaver中调用了define()函数,这是一个问题 这是本手册中的内容: 确保通过RequireJS API加载所有调用define()的脚本。 不要在HTML中手动编写脚本标记以加载具有 在它们中定义()调用 我用requireJS API加载了该文件,一切正常…这对我来说很有用:
requirejs(["lib/FileSaver"], function(){
console.log("in FileSAver");
var text = createString();
var fileName = getFileName();
var blob = new Blob([text], {type: "text/plain;charset=utf-8"});
window.saveAs(blob, fileName);
});
由于
FileSaver.js
使用的是命名的AMD模块,因此您必须将其作为require.config
文件中的包使用,就像moment
库一样
require.config({
packages: [{
name: 'moment',
location: './js/resources/',
main: 'moment'
}, {
name: 'FileSaver.js',
location: './js/resources/',// path where you have placed FileSaver.js file
main: 'FileSaver.js'
}]
});
然后只需要包FileSaver.js
requirejs(["FileSaver.js"], function(FileSaver) {
//FileSaver is now available as function
console.log(FileSaver);
});
这并不能解释OP得到的错误。不存在解决方案取决于设置
包的“不匹配的匿名定义”错误。接受的答案解释了OP的错误。是的,但如果它对任何人都有帮助的话,仅通过requireJS API加载文件并不是一个真正的解决方案,因为我已经尝试过了。注意filesaver:{exports:“filesaver”}的用法不正确,
不起作用。如果您发布了用于使require callback函数与filesaver一起加载的代码,那么这个答案会更有帮助。这个答案告诉了我为什么会出现这个问题,但是IMO requirejs文档在需要更多配方时就不好了。