使用knockout-jqueryui与捆绑

时间:2014-04-08 03:54:10

标签: jquery-ui knockout.js bundling-and-minification

根据“Reference bundles on requirejs”,获取requirejs引用bundle中传递的模块的问题的解决方案是使用与文件名完全匹配的名称命名它们,以便在关闭优化时从文件系统中解析它们启用优化功能后,他们会从捆绑包中解析。

这是淘汰赛的开始-jqueryui

/*! knockout-jqueryui - v1.0.0 - 3/21/2014
* https://github.com/gvas/knockout-jqueryui
* Copyright (c) 2014 Vas Gabor <gvas.munka@gmail.com>; Licensed MIT */
/*global require, define, exports*/
/*jslint browser:true, maxlen:256*/
(function (root, factory) {
    'use strict';

    if (typeof exports === 'object') {
        // CommonJS
        factory(exports, require('jquery'), require('knockout'), require('jquery-ui'));
    } else if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module.
        define(['exports', 'jquery', 'knockout', 'jquery-ui'], factory);
    } else {
        // Browser globals
        factory((root.kojqui = {}), root.jQuery, root.ko);
    }
} (this, function (exports, $, ko) {
    'use strict';

你可以看到它是匿名的。我有两个明显的选择:

  1. 编辑文件并为其命名,并与文件相匹配。

  2. 以某种方式将其包装起来以便命名。

  3. 选项一很简单:

    if (typeof exports === 'object') {
        // CommonJS
        factory(exports, require('jquery'), require('knockout'), require('jquery-ui'));
    } else if (typeof define === 'function' && define.amd) {
        // AMD. Register as a module named 'knockout-jqueryui'.
        define('knockout-jqueryui',
               ['exports', 'jquery', 'knockout', 'jquery-ui'], factory);
    } else {
        // Browser globals
        factory((root.kojqui = {}), root.jQuery, root.ko);
    }
    

    但这似乎不是一个好主意。我对AMD很陌生,所以如果有人能告诉我一个好的方法来实现一个选项二包装,那就太棒了。

1 个答案:

答案 0 :(得分:0)

我很高兴地报告说我找到了一个很好的清洁解决方案。

捆绑导致knockout-jqueryui.js由脚本标记直接加载。因此,它使用问题中显示的代码提取中的第三个工厂选项,生成全局kojqui

此全局属于main.js的范围,可以捕获:

requirejs.config({
  paths: {
    'text': '../Scripts/text',
    'durandal': '../Scripts/durandal',
    'plugins': '../Scripts/durandal/plugins',
    'transitions': '../Scripts/durandal/transitions'
  }
});

define('jquery', function () { return jQuery; });
define('knockout', ko);
define('moment', function () { return moment; });
define('knockout-jqueryui', kojqui);

在knockout-jqueryui.js中不需要进行任何更改,并且我已经验证这可以在启用优化和关闭优化的情况下进行调试。