如何使用requirejs构建durandal应用程序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用requirejs构建durandal应用程序?相关的知识,希望对你有一定的参考价值。

我正在使用gulp-durandal,但它只支持构建到一个单独的文件中。

现在我想使用requirejs和bundles功能,但还不能使它工作。

这是我使用的gulp文件:

var requirejs = require('requirejs');
var gulp = require('gulp');

var requireJsOptimizerConfig = {
    out: '../dist/main-built.js',
    baseUrl: 'app',
    name: 'main',
    paths: {
        requireLib: '../scripts/require',
    },
    include: [
        "requireLib",
    ],
    insertRequire: ['main'],
    bundles: { },
    mainConfigFile: 'main.js',
};

gulp.task('build', function () {
    requirejs.optimize(requireJsOptimizerConfig);
});

main.js文件看起来像这样:

requirejs.config({
    paths: {
        'text': '../lib/require/text',
        'durandal':'../lib/durandal/js',
        'plugins' : '../lib/durandal/js/plugins',
        'transitions' : '../lib/durandal/js/transitions',
        'knockout': '../lib/knockout/knockout-3.4.0',
        'bootstrap': '../lib/bootstrap/js/bootstrap',
        'jquery': '../lib/jquery/jquery-1.9.1'
    },
    shim: {
        'bootstrap': {
            deps: ['jquery'],
            exports: 'jQuery'
       }
    }
});

define([...], function(){ ... });

尽管gulp运行时没有任何错误,但当我访问该站点时,有一个奇怪的HTTP请求:

http://localhost:8080/Scripts/durandal/plugins/widget.js?v=1.0.0.0

我猜测文件夹durandal/js/plugins中的插件编译不正确。我怎么解决这个问题?

我尝试明确指定widget库,但它仍然在寻找Scripts文件夹:

paths: {
    requireLib: '../scripts/require',
    'widget': '../Scripts/durandal/plugins/widget',
},
include: [
    "requireLib",
    'widget',
],

我也不明白durandal如何在第一时间运行。因为据我所知,你必须定义每个单独的模块,所以这个配置如何工作:

paths: {
    plugins' : '../lib/durandal/js/plugins'
}
答案

我找到了解决方案。首先,requirejsrjs是两个不同的东西。

requirejs支持bundles,但rjs,进行构建/优化的工具,没有这个选项。

所以我们必须手动构建每个包。而且,通过bundles选项,通过添加以下代码告诉requirejs所有这些包,它们内部的内容:

require.config({
    bundles: {
        bundle1: ['file1', 'file2'],
        ...
    }
});

当需要文件时,requirejs将查看此“地图”并加载包含该文件的包(如果尚未加载)。

我根据SteveSanderson的作品修改了原来的gulp-durandaldurandal-bundler.js; gulpfile.js

SteveSanderson的演讲:

http://vimeo.com/97519516

https://github.com/SteveSanderson/generator-ko

以上是关于如何使用requirejs构建durandal应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何开始使用带有 Durandal SPA 应用程序的 Phonegap Build?

如何使 jQuery AutoComplete 功能在 Durandal 中工作?

requirejs - 如何在服务器生成的值初始化时构建应用程序

使用RequireJS将React16 Build加载到另一个应用程序中

VS2015 中的 bower 错误“bower requirejs extra-resolution 不必要的分辨率:requirejs#~2.2.0”

使用插件将RequireJS / AMD迁移到Webpack