web-dev-qa-db-ja.com

特定のrequireJSファイルを醜化/最適化から除外する方法

ビルドとデプロイにうなり声を使用している作業requirejsプロジェクトがあります。最適化をまったく使用しない場合、ビルドは問題なく機能しており、1つの大きなjsファイルを取得して本番環境にデプロイします。

私が抱えている問題は、すでに最小化/最適化されたバージョンがあり、再度最適化したくない外部フレームワーク(angularJSなど)があることです。

現在最適化なしで、私はこのフレームワークの縮小版を別のパス設定を介してgruntfileに含めています。私の通常のmain.jsには、開発用の非縮小バージョンがあります。

次に、オプティマイザを使用して自分のコードを最適化し、外部フレームワークは最適化しないようにします。ただし、外部フレームワークは、結果の大きなjavascriptファイルに含める必要があります。基本的に私はオプティマイザに、場合によっては元のファイルを使用するように伝えたいと思います。

このようなことはできますか?

私はグローバル除外オプションを見つけただけなので、一部のモジュールは、結果として得られる最適化されたjsにまったく含まれていません。

これは私の不平の設定です:

requirejs: {
            compile: {
                options: {
                    baseUrl: "<%= pkg.folders.jsSource %>",
                    name: "../external-libs/almond-0.1.1",
                    include: "main",
                    mainConfigFile: "<%= pkg.folders.jsSource %>/main.js",
                    out: "<%= pkg.folders.build + pkg.name + '-' + pkg.version %>/js/main.js",
                    //logLevel: 0,
                    optimize: "uglify2",
                    //optimize: "none",
                    paths: {
                        'angular':'../external-libs/min/angular-1.0.4',
                        'jquery':'../external-libs/min/jquery-1.7.2',
                        'jquery.mobile':'../external-libs/min/jquery.mobile-1.2.0',
                        'adapter': '../external-libs/min/jquery-mobile-angular-adapter-1.2.0',
                        'moment': '../external-libs/moment-1.6.2.min',
                        'iscroll': '../external-libs/min/iscroll-4.2.5',
                        'iscrollview': '../external-libs/min/jquery.mobile.iscrollview-1.2.6',
                        'add2Home': '../external-libs/min/add2home',
                        'config/config': "config/<%=configDatei%>"
                    }
                }
            }
        },

そして、これはmain.jsの関連部分です:

require.config({
        paths:{
            'angular':'../external-libs/angular-1.0.4',
            'jquery':'../external-libs/jquery-1.7.2',
            'jquery.mobile':'../external-libs/jquery.mobile-1.2.0',
            'adapter': '../external-libs/jquery-mobile-angular-adapter-1.2.0',
            'moment': '../external-libs/moment-1.6.2.min',
            'iscroll': '../external-libs/iscroll-4.2.5',
            'iscrollview': '../external-libs/jquery.mobile.iscrollview-1.2.6',
            'add2Home': '../external-libs/add2home'
        },
        shim:{
            'angular':{ deps:['jquery'], exports:'angular' },
            'iscroll':{ deps:['jquery'], exports:'iscroll' },
            'iscrollview':{ deps:['jquery.mobile', 'iscroll'], exports:'iscrollview' }
        }
    });

助けてくれてありがとう。

27
Marco Rinck

いくつかの提案ではempty:を使用して[〜#〜] not [〜#〜]を示し、モジュールを最適化に含めます。

Require.configでは、minファイルの使用法を示します。

requirejs: {
            compile: {
                options: {
                    {{ all other settings }}
                    paths: {
                        'angular':'empty:',
                    }
                }
            }
        },

   require.config:{  
              paths:{
              'angular':'../external-libs/min/angular-1.0.4',
        },
   }

これは "empty:"に末尾にコロンを付けたものであり、 "empty"ではないことに注意してください。コロンを省略すると、次のようなエラーが発生します。

"No such file or directory [...]/empty.js" 

お役に立てれば。

19
Ian Lim

私は常に外部ライブラリが回答へのコメントとして再縮小されるという同じ問題を抱えていましたが、これは私がそれを回避するために使用する方法です。コードと外部ライブラリの2つのタスクがあります。これは実際にはファイルをコピーするだけなので、コピータスクだけでも機能します。また、外部ライブラリには「empty:」キーワークを使用しているため、コードの縮小には含まれていません。

requirejs: {
    options: {
        mainConfigFile: '...',
        fileExclusionRegExp '...common things to exclude...'
    },
    main: {
        options: {
            baseUrl: '.../js',
            dir: '.../js-built',
            fileExclusionRegExp: /^external$/,
            ... etc ...
        }
    },
    external: {
        options: {
            baseUrl: '.../js/external',
            dir: '.../js-built/external',
            optimize: 'none'
        }
    }
}
5
Matt Holcomb