Dojo 1.8 и строит (или их отсутствие) - программирование
Подтвердить что ты не робот

Dojo 1.8 и строит (или их отсутствие)

Я действительно не знаю, с чего начать.

Я прочитал каждый учебник, статью и сообщение в блоге, чтобы попытаться получить одну вещь, с которой работает dojo, и никогда не сталкивался с такой проблемой, чтобы что-то работать, по крайней мере, просто немного. Я нашел пламенные войны над документацией, а также людей с рабочими сценариями, но ничего не опубликовано или не указано. В SO, я обнаружил, что это очень распространенная проблема, но не решить половину времени.

Отказ от ответственности: забудьте 1.6. Я никогда не использовал 1.6. Поэтому половина моих ресурсов, найденных в Интернете, недействительна, и моя книга тоже. Здесь мы идем.

Вопрос 1

Какая разница между LOT сообщений об использовании этого формата:

dependencies = {
    stripConsole: "all",
    action: "release",
    optimize: "shrinksafe",
    // Omitted options...
    layers: [{
        name: "dojo.js",
        customBase : true,
            dependencies: [ 
              "dojox.gauges.AnalogNeedleIndicator",
              "myApp.smartmix"]           
        }
    ],
    prefixes: [
        [ "dijit", "../dijit" ], 
        [ "dojox", "../dojox" ],
        [ "myApp", "../../../myApp" ]
    ]
};

... в этом формате:

var profile = {
    basePath: './',
    stripConsole: 'all',
    selectorEngine: 'lite',
    layers: {
        'dojo/dojo': {
            include: ['dojo/dojo', 'dojo/domReady', 'dojo/_base/declare'],
            boot: true,
            customBase: true
        },
        'dgrid/dgrid': {
            include: ["dgrid/List", "dgrid/OnDemandGrid", "dgrid/Selection", "dgrid/Keyboard", "dgrid/test/data/perf"]
        }
    }
    // static-has-features removed
};

Есть два очень важных различия в объекте layers между двумя: либо A) Кажется, что все просто "знают" без какой-либо причины или рациональности, или B) Люди просто "знают". Я еще не нашел ничего о различиях между двумя синтаксисами (синтаксис синтаксиса?), Которые имеют какое-либо отношение к новой структуре AMD и переписыванию системы сборки.

Ближайшее, что я видел, это имя объекта не имеет значения, равно как и декларация. Это может быть "глобальная" переменная (исключение ключевого слова var), или нет, это имя не имеет значения, пока возвращаемый объект содержит необходимую информацию.

Второй формат дает мне ошибку "неожиданного String" и не работает 99% времени, даже при копировании/вставке профилей.

Вопрос 2

Что именно требуется?! В документации dojo указано, что package.json И файл appName.profile.js НЕОБХОДИМО, но во всех обучающих программах, которые я видел, нужен только профиль и используется, если на то пошло. Поэтому половина информации на главном веб-сайте dojo о строительстве не используется. Так........?

Сайт dojo говорит, что для выпуска сборки используется src. Парень из Nabble сказал, что вы должны получить версию svn, поскольку версия src уже "построена".

... так кто первым?

Вопрос 3

Кто-нибудь, кто-либо вообще, имеет рабочую структуру каталогов и profile.js файл, который они хотели бы разделить? Я пробовал ВСЕ. И я имею в виду ВСЕ, чтобы получить сборку. Одно из предложений заключалось в использовании пустого объекта профиля. Это работает, и это бесполезно.

Другое предложение состояло в том, чтобы использовать конструкцию шаблона dojo. Какой хороший шаблон, если какое-либо изменение нарушает его? То, что вы пробовали, является спорным моментом, как я пробовал, по словам Тони Старка, "каждая перестановка каждого известного [изменения объекта JavaScript]. Ничего не работает".

Я теряю веру быстро. Не потому, что я не могу понять это после нескольких часов испытаний и неудач, а потому, что много людей находятся в одной лодке. Это sinkin '.

Заключительный вопрос

Итак, мой последний запрос, может кто-то, ПОЖАЛУЙСТА, пролить свет на то, как работает эта система сборки, а не только ссылки на уже очищенные ссылки на чтение и перечитание, которые можно найти в Google?

Как... вы... настраиваете профиль сборки dojo... и выполняете его... без ошибок?! Это безумие, насколько плохая эта система как A) документирована, так и B) реализована, и пока я на ней C) учил. Это изнурительно.

Некоторые (многие) сайты, которые я посетил:

Update

Большое спасибо @xesxz и @Craig Swing. После нескольких незначительных вещей у меня есть профиль сборки, который отрывается и дает мне то, что мне нужно!

4b9b3361

Ответ 1

Какая разница между LOT сообщений об использовании этого формата...

Ваш первый пример для сборки pre Dojo 1.7. Если вы используете 1.7 или более позднюю версию, вам нужен второй пример.

Сайт Dojo говорит о том, чтобы использовать версию src для сборки. Парень в Nabble сказал, что вы должны получить версию svn, поскольку версия src уже "Встроенный".

... так кто первым?

Вам нужен SDK из http://dojotoolkit.org/download/

На странице он помечен как "Источник". В нем содержится утилита, в которой есть все скрипты сборки, а также другие каталоги, содержащие нестрочные версии файлов Dojo.

Кто-нибудь, кто-либо вообще, имеет рабочую структуру каталогов и файл profile.js, который они хотели бы разделить?

Проекты, над которыми я работаю, имеют схожую структуру с тем, что отправлено @xesxz. Но я пробовал использовать boot: true, customBase: true без успеха. Ниже приведен мой профиль. (Моя структура каталогов немного отличается, поэтому пути не соответствуют тому, что отправлено @xesxz).

В моем приложении я буду включать следующие

  • dojo/dojo.js
  • myCore/core.js
  • myAppModuleX/app.js, где X - это конкретный модуль, который я использую на странице.

core.profile.js(для построения)

var profile = (function(){
     var coreRequires = [
        "dojo/_base/declare",
        "dojo/_base/fx",
        "dojo/_base/lang",
        "dojo/currency",
        "dojo/fx",
        "dojo/number",
        "dojo/on",
        "dojo/query",

        "dijit/dijit",

        "myCore/ACoreWidget"
    ];

    return {
        basePath:       "./dojo-release-1.8.3-src",
        releaseDir:     "../../DEV-REL",
        action:         "release",
        cssOptimize:    "comments",
        selectorEngine: "acme",

        packages:[{
            name: "dojo",
            location: "dojo"
        },{
            name: "dijit",
            location: "dijit"
        },{
            name: "dojox",
            location: "dojox"
        },{
            name: "myCoreModule",
            location: "../myCore"
        },{
            name: "myAppModule1",
            location: "../myAppModule1"
        },{
            name: "myAppModule2",
            location: "../myAppModule2"
        }],

        layers: {
            "myCore/core": {
                include:    coreRequires
            },

            "myAppModule1/app": {
                include:    [
                    "myAppModule1/WidgetX"
                ],
                exclude: coreRequires
            },

            "myAppModule2/app": {
                include:    [
                    "myAppModule2/WidgetY"
                ],
                exclude: coreRequires
            }
        }
    };
})();

Как... вы... настраиваете профиль сборки Dojo... и выполняете его... без ошибок?

Я использую node для сборки. Это выполняется в каталоге, который содержит профиль сборки.

node dojo-release-1.8.3-src/dojo/dojo.js load=build --profile core.profile.js --release --version=1.8.3

Моя рекомендация - попытаться завершить сборку с помощью простого пользовательского виджета, который очень прост. Если это работает, то ваши реальные виджеты

Относительно unexpected String,

  • Все ли ваши виджеты используют новый синтаксис AMD?
  • У вас есть dgrid, но я считаю, что имеет зависимости от put-selector и xStyle

Ответ 2

Недавно я прошел процесс, и я полностью понимаю ваше разочарование. Я пробовал Boilerplate Dojo без успеха. Затем я последовал за учебником Dojo. Мой каталог плоский, например,

 ____app
 |   |__app.profile.js
 |   |__package.json
 |   |__app.js (main js file, which requires other modules)
 |   |__other.js
 | 
 |__dojo
 |__dijit
 |__dojox
 |__util
 |__application.profile.js

Профиль сборки приложения (application.profile.js) скопирован из Dojo Boilerplate и выглядит следующим образом:

var profile = {
    basePath: '.',
    action: 'release',
    cssOptimize: 'comments',
    mini: true,
    optimize: 'closure',
    layerOptimize: 'closure',
    stripConsole: 'none',
    selectorEngine: 'acme',
    packages: [
        {name: 'dojo', location: 'dojo'},
        {name: 'dijit', location: 'dijit'},
        {name: 'dojox', location: 'dojox'},
        {name: 'util', location: 'util'},
        {name: 'app', location: 'app'}
    ],

    layers: {
        'dojo/dojo': {
            include: ['dojo/i18n', 'dojo/domReady'],
            boot: true,
            customBase: true
        },
        'app/app': {}
    },
    staticHasFeatures: {
        'dojo-trace-api': 0,
        'dojo-log-api': 0,
        'dojo-publish-privates': 0,
        'dojo-sync-loader': 0,
        'dojo-xhr-factory': 0,
        'dojo-test-sniff': 0
    }
};

В моем собственном каталоге приложений у меня есть как package.json(который определяет свойство dojoBuild: "package.js" ), так и файл package.js для сборки пакета, который выглядит следующим образом:

var profile = {
resourceTags: {
    test: function (filename, mid) {
        return false;
    },
    copyOnly: function (filename, mid) {
        return (!/\.js$/.test(filename) && !/\.css$/.test(filename));
    },
    amd: function (filename, mid) {
        return !this.copyOnly(filename, mid) && /\.js$/.test(filename);
    },

    miniExclude: function (filename, mid) {
        return mid in {
            'app/package': 1
        };
    }
};

Затем я запускаю до /buildscripts/build.sh --profile application.profile.js. Я все еще получаю много ошибок, но, в конце концов, у меня есть моя сборка в каталоге выпуска, и, похоже, она работает нормально. Следующий шаг для меня - выяснить эти ошибки. Надеюсь, это поможет.