Filesaver和requireJS:匿名定义不匹配

时间:2014-12-04 16:18:32

标签: javascript requirejs

我用户FilesaverJS用于在客户端保存JSON文件。

当我使用RequireJS加载Filesaver JS时出错:

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');

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。在调查之后,我意识到我正在将脚本标记中的FileSaver文件加载,并且因为在FileSaver中调用了define()函数 - 这是一个问题。

这是reauire.js docs中的陈述:

  

确保通过RequireJS API加载调用define()的所有脚本。   不要在HTML中手动编写脚本标记以加载具有的脚本   define()调用它们。

我使用requireJS API加载文件,一切正常......

答案 1 :(得分:0)

这对我有用:

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);

});

答案 2 :(得分:0)

由于@0.0.0 No repository field使用的是命名的AMD模块,因此您必须将其用作FileSaver.js文件中的包,例如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