Включите простой файл javascript в профиль сборки dojo.

Я создаю додзё 1.8.3 с профилем, который объединяет весь додзё и мой собственный код AMD в один слой. Я также хотел бы включить некоторые не-AMD библиотеки (например, history.js) и полифилы в тот же файл, как есть. Можно ли это сделать с помощью системы сборки додзё?

Текущий профиль сборки:

var profile = (function () {
var conf = {
    basePath: ".",
    layerOptimize: "closure",
    optimize: "closure",
    cssOptimize: "comments",
    mini: true,
    selectorEngine: "acme",

    defaultConfig: {
        hasCache: {
            "dojo-built": 1,
            "dojo-loader": 1,
            "dom": 1,
            "host-browser": 1,
            "config-selectorEngine": "acme"
        },
        async: 1
    },

    packages: [{
        name: "dojo",
        location: "./dojo"
    }, {
        name: "dijit",
        location: "./dijit"
    }, {
        name: "dojox",
        location: "./dojox"
    }, {
        name: "MyApp",
        location: "./MyApp"
    }, {
        name: "bootstrap",
        location: "./bootstrap"
    }],

    layers: {
        "dojo": {
            name: "dojo",
            include: [
                "dojo/dojo",
                "dojo/domReady",
                "MyApp/common",
                "MyApp/bootstrap"
            ]
        }
    }
}
return conf;
}());

person synecdoche    schedule 29.04.2013    source источник


Ответы (1)


Если вы добавите файлы в виде пакета, dojo автоматически упакует их и включит. Я добавил это в раздел пакетов:

{
    name: "libs",
    location: "./libs"
}

и изменил определение слоя на:

"dojo": {
     name: "dojo",
     include: [
         "dojo/dojo",
         "dojo/domReady",
         "libs/history/native.history",
         "libs/base64/base64",
         "MyApp/common",
         "MyApp/bootstrap"
     ]
 }    

(base64 и native.history — обычные библиотеки Javascript)

person synecdoche    schedule 29.04.2013
comment
При использовании этого стиля для включения простого javascript вам все равно нужно выполнить требование. например require(libs/history/native.history, function() { .. сделать что-нибудь..}); Я спрашиваю, потому что я пытаюсь перенести наш код в сборщик 1.9 (из 1.6), и у нас есть простой javascript, включенный в слой. Как только слой загружен, функции доступны в глобальном пространстве имен (без требования), и я бы хотел избежать поиска всех использований и их изменения. - person ekj; 28.10.2013
comment
Вам нужно будет где-то потребовать его, чтобы убедиться, что он включен во встроенный JS (или будет задействован AMD). Потребовав его один раз, он должен быть доступен с тех пор в любом пространстве имен, которое определяет ваш простой код (например, window.history для history.js). Вам не нужно будет требовать его в каждом контексте, в котором вы его используете. - person synecdoche; 30.10.2013
comment
@synecdoche не работает, когда я пытаюсь включить руль. - person Evan Hu; 11.07.2017