首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用requirejs构建durandal应用程序?

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

Stack Overflow用户
提问于 2018-12-26 19:58:09
回答 1查看 123关注 0票数 1

我使用的是gulp durandal,但它只支持构建到一个文件中。

现在我想使用requirejs和bundles特性,但是还不能让它工作。

这是我使用的gulp文件:

代码语言:javascript
复制
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文件如下所示:

代码语言:javascript
复制
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请求:

代码语言:javascript
复制
http://localhost:8080/Scripts/durandal/plugins/widget.js?v=1.0.0.0

我猜是文件夹durandal/js/plugins中的插件没有正确编译。我该如何解决这个问题呢?

我尝试显式指定widget库,但它仍在查找Scripts文件夹:

代码语言:javascript
复制
paths: {
    requireLib: '../scripts/require',
    'widget': '../Scripts/durandal/plugins/widget',
},
include: [
    "requireLib",
    'widget',
],

我也不明白durandal是怎么跑起来的。因为,据我所知,你必须定义每个单独的模块,那么这个配置是如何工作的:

代码语言:javascript
复制
paths: {
    plugins' : '../lib/durandal/js/plugins'
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-13 20:15:51

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

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

因此,我们必须手动构建每个包。然后,通过bundles选项,通过添加以下代码告诉requirejs所有这些包,包中的内容:

代码语言:javascript
复制
require.config({
    bundles: {
        bundle1: ['file1', 'file2'],
        ...
    }
});

当需要一个文件时,requirejs会查看这个“映射”,并加载包含该文件的包,如果它还没有加载的话。

我根据SteveSanderson的工作修改了原始的gulp-durandal基础:durandal-bundler.jsgulpfile.js

SteveSanderson的演讲:

http://vimeo.com/97519516

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53931802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档