如何用r.js优化ember-data

时间:2014-08-14 07:28:52

标签: javascript node.js ember.js requirejs ember-data

我最近切换到ember-data#canary,然后r.js开始失败。

 [Error: Error: ENOENT, no such file or directory 
     '/scripts/lib/ember-data/ember-data/core.js'
In module tree:
    app/main
      app/app
        ember-data

    at Object.fs.openSync (fs.js:427:18)
]

这是构建配置文件

`File: build.js`
    var config = {
        mainConfigFile: '/scripts/common.js',
    }

这是requirejs配置文件

requirejs.config({
    paths: {
        ember: 'ember/ember',
        jquery: 'jquery/dist/jquery',
        requirejs: 'requirejs/require',
        handlebars: 'handlebars/handlebars',
        'ember-data': 'ember-data/ember-data',
    },
    shim: {
        ember: {
            deps: [
                'handlebars',
                'jquery'
            ],
            exports: 'Ember'
        },
        'ember-data': {
            deps: [
                'ember'
            ],
            exports: 'DS'
        },
    }
});

这就是我使用ember-data的方式:

define(['ember', 'ember-data'], function(Ember, DS) {
});

你可以看到ember-data canary build here

1 个答案:

答案 0 :(得分:0)

这个bug已经从ember-data 1.0.0-beta.9中得到满足,因为在这个版本中已经在源代码中更新了函数require。您可以恢复为beta.8或尝试使用插件derequire解决此问题(grunt-derequire,gulp-derequire)。

我已经完成了这项任务:

gulp.task('build-derequire', function() {
return gulp.src([paths.src.common + '/bower_components/**/ember-data*.js'])
    .pipe($.derequire([
            {
                from: 'require',
                to: '_dereq_'
            },
            {
                from: 'define',
                to: '_defi_'
            }
    ]))
    .pipe(gulp.dest(paths.dev_dist + '/scripts/lib'));
});