3

AMD ベースの Dojo ビルド システムの学習に苦労しています。これまでのところ、ブラウザー (FF) でロード エラーが発生せずに使用できるビルドを取得できていません。

ビルドの管理方法について質問があります。

私のビルド プロファイル ファイルには、packages セクションがあります。私が指定した内容は、宛先ディレクトリに書き込まれている同じパッケージ ディレクトリに直接関連しているようです。これは適切なようです。ただし、dojo、dijit、dojox などから「参照された」モジュールだけをマージしようとしているレイヤー セクションもあります。それらが 1 つの dojo.js ファイルに結合されると、宛先ディレクトリにそれらのライブラリ ディレクトリがすべて残っています。 . 手動でそれらを削除するだけであることが理解されていますか、それともビルド中にそれらを自動的に削除する方法はありますか?

最初のレイヤーでは、dojo、dijit、および dojox/app/main 用にビルドしようとしています。これは、dojo/resources/blank.gif や同じディレクトリ内の .css ファイルなどのリソースをプルするわけではありません。これらのリソース ファイルをコピー先にコピーするにはどうすればよいでしょうか。dojo.profile.js (これらのリソースをコピーすることを示しています) は dojo ディレクトリにのみ影響を与えると思います。しかし、js モジュールを組み合わせたカスタム dojo/dijit/dojox ファイルを作成しているため、リソース ディレクトリはありません。カスタム・ビルドの後、手動で dojo ディレクトリーに移動し、dojo/resources ディレクトリーを移動して、残りの dojo ディレクトリーを破棄する必要がありますか? dojo/dijit 層が構築されたときに、カスタム dojo.js 層ファイルで使用するために dojo dir でアクセス可能な依存 img および css ファイルを取得する方法がわかりません。

ここに私のビルドプロファイルがあります:

var profile = {
    basePath: "./",
    //releaseDir: "irb-release",
    action: "release",
    cssOptimize: "comments",
    stripConsole: 'all',
    selectorEngine: 'acme',
    layerOptimize: 'closure',
    optimize: 'closure',
    mini: true,
    packages:[
            { name: "dojo",         location: "../libs/dojo" },
            { name: "dijit",        location: "../libs/dijit" },
            { name: "dojox",        location: "../libs/dojox" },
            { name: "dgrid",        location: "../libs/dgrid" },
            { name: "put-selector", location: "../libs/put-selector" },
            { name: "xstyle",       location: "../libs/xstyle" },
            { name: "myPkg",     location: "../libs/myPkg" },
            { name: "irb",          location: "../irb" }
    ],
    layers: {
            "release/irb/libs/dojo": {
                    include: ["dojo/dojo", "dijit/dijit", "dojox/app/main"],
                    boot: true,
                    customBase: true
            },
            "release/irb/libs/myPkg": {
                    include: [
                            "myPkg/dialog/MessageBox",
                            "myPkg/grids/FilterGrid",
                            "myPkg/util/WidgetMonitor",
                            "myPkg/controllers/BorderLayout",
                            "myPkg/controllers/UnloadViewController"
                     ],
                    includeLocales: [ 'en-us' ]
            },
            "release/irb/libs/store/Memory": {
                    include: [ "dojo/store/Memory" ]
            },
            "release/irb/libs/store/Observable": {
                    include: [ "dojo/store/Observable" ]
            },
            "irb/irb": {
                    include: [
                            "irb/irb",
                            "dojox/app/View",
                            "dojox/css3/transit",
                            "dojox/app/controllers/Load",
                            "dojox/app/controllers/Transition",
                            "dojox/app/controllers/History"
                    ]
            }
    },

    staticHasFeatures: {
            // The trace & log APIs are used for debugging the loader, so we do not need them in the build.
            'dojo-trace-api': 0,
            'dojo-log-api': 0,

            // This causes normally private loader data to be exposed for debugging. In a release build, we do not need
            // that either.
            'dojo-publish-privates': 0,

            // This application is pure AMD, so get rid of the legacy loader.
            'dojo-sync-loader': 0,

            // `dojo-xhr-factory` relies on `dojo-sync-loader`, which we have removed.
            'dojo-xhr-factory': 0,

            // We are not loading tests in production, so we can get rid of some test sniffing code.
            'dojo-test-sniff': 0
    }
}; 

更新:これは私のディレクトリ構造です。dojox/app 構造に基づく:

/(webroot)
    /irb
        /controllers
        /res
            /css
            /img
        /views
        build.sh
        config.json
        index.html
        irb.js
        package.js
        package.json
        release.profile.js
    /libs
        /dgrid
        /dijit
        /dojo
        /dojox
        /myPkg
        /put-selector
        /util
        /xstyle

ビルドには、dojox/app の例に基づいた build.sh ファイルを使用しますが、それが呼び出す内部コマンド ラインは次のとおりです。

node "/home/(user)/(project ... path)/(webroot)/libs/dojo/dojo.sh" 
  load=build 
  --require "/home/(user)/(project ... path)/(webroot)/irb/irb.js" 
  --profile "/home/(user)/(project ... path)/(webroot)/irb/release.profile.js"
  --appConfigFile "/home/(user)/(project ... path)/(webroot)/irb/config.json"
  --releaseDir "/home/(user)/(project ... path)/(webroot)/build" 
4

1 に答える 1

2

追加のファイルとディレクトリ

それらを削除しないことは良い習慣だと思います。ビルドを実行する理由は、使用されるすべてのものをいくつか (できれば 1 つ) の JavaScript ファイルにまとめることで、Web ブラウザーのパフォーマンスを向上させるためです。

しかし、使用されているファイル(モジュール)がレイヤーに含まれていない場合はどうなりますか。ビルド ディレクトリに他のファイルがある場合でも、アプリケーションは動作しますが、そのファイルを取得するためにサーバーをさらに呼び出すだけです。これらのディレクトリとファイルを削除すると、アプリケーションが壊れます。


リソースのプルオーバー

カスタムビルドを行った後、私は

release/RELEASE_NAME/dojo/resources 

あなたが言及したすべてのリソースを含むディレクトリ。


編集:例を追加しています...

指示

node path/to/dojo/dojo.js 
    load=build --profile path/to/build.profile.js --release --version=1.9.0

build.profile.js

var profile = (function(){
    return {
        // Assuming that the node command is being run in 
        // the webroot directory.  If not, update the basePath
        // to the libs directory using the current directory as
        // the starting point.
        basePath:        "./libs",

        releaseDir:      "/path/to/release/dir",
        action:          "release",
        releaseName:     "release",
        layerOptimize:   "shrinksafe",
        optimize:        false,
        cssOptimize:     "comments",
        mini:            false,
        stripConsole:    "normal",
        selectorEngine:  "acme",

        packages:[
            {name: 'dojo', location: 'dojo'},
            {name: 'dijit', location: 'dijit'},
            {name: 'dojox', location: 'dojox'},
            {name: 'dgrid', location: 'dgrid'},
            {name: 'put-selector', location: 'put-selector'},
            {name: 'xstyle', location: 'xstyle'}
            {name: 'irb', location: '../irb'},
        ],
        layers: {
            'irb/dojo": {
                include: ["dojo/dojo", "dijit/dijit", "dojox/app/main"],
                boot: true,
                customBase: true
            },
            ...
        }
    };
})();
于 2013-07-19T12:43:24.480 に答える