【问题标题】:How to build durandal app using requirejs?如何使用 requirejs 构建 durandal 应用程序?
【发布时间】:2019-03-13 20:15:51
【问题描述】:

我正在使用 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'
}

【问题讨论】:

    标签: build requirejs durandal requirejs-optimizer


    【解决方案1】:

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

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

    所以我们必须手动构建每个包。然后,通过bundles 选项,通过添加以下代码告诉requirejs 所有这些捆绑包,其中包含什么:

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

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

    我根据 SteveSanderson 的工作修改了原来的 gulp-durandaldurandal-bundler.jsgulpfile.js

    史蒂夫桑德森的演讲:

    http://vimeo.com/97519516

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

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 2014-04-08
      相关资源
      最近更新 更多