6

ハンドルバー テンプレートを使用してライブラリを作成しており、Webpack を使用してバンドルしたいと考えています。テンプレートを要求してプリコンパイルできるように、handlebars-loaderを使用しています。

ただし、ハンドルバー (ハンドルバー/ランタイムも) をコンパイル済みライブラリに含めたくないので、それらを外部として設定したいと思います。

ここに私の設定ファイルがあります:

module.exports = {
    context: __dirname + '/src',
    entry: './index.js',
    output: {
        path: __dirname + '/dist',
        filename: 'stuff.js',
        libraryTarget: 'umd',
        library: 'Stuff'
    },
    externals: [{
        'handlebars/runtime': {
            root: 'Handlebars',
            amd: 'handlebars.runtime',
            commonjs2: 'handlebars/runtime',
            commonjs: 'handlebars/runtime'
        }
    }],
    module: {
        loaders: [
            { test: /\.handlebars$/, loader: 'handlebars-loader' }
        ]
    }
};

残念ながら、それは機能せず、handlebars-loader はまだハンドルバー/ランタイムをバンドルします...

ハンドルバー/ランタイムを直接必要とせず、ローダーによって追加されたコードで必要になるためだと思います。

それを外部としてマークする方法はありますか?

編集:テンプレートをコンパイルするには、ハンドルバー/ランタイムが必要であることを知っています。しかし、ライブラリを構築しているので、ライブラリを含めるのではなく、ライブラリのユーザーが提供するようにしたいと考えています。このように、ユーザーがハンドルバーも使用している場合、ライブラリが 2 回読み込まれることはありません。ライブラリが依存関係をバンドルすることを避けることは良い習慣だと思います (私の謙虚な意見では、これはあまりにも頻繁に見られるものです)。

4

1 に答える 1

4

handlebars-loader のチームがこの問題の解決を手伝ってくれました

問題はhandlebars-loader、デフォルトでは、絶対パスを使用してハンドルバーのランタイムをロードすることです。ただし、runtimeハンドルバー ローダーの引数を使用して、ハンドルバーのランタイムに別のパスを指定することは可能です。その後、このパスを外部として設定できます。

これは機能しています:

module.exports = {
    context: __dirname + '/src',
    entry: './index.js',
    output: {
        path: __dirname + '/dist',
        filename: 'stuff.js',
        libraryTarget: 'umd',
        library: 'Stuff'
    },
    externals: [{
        'handlebars/runtime': {
            root: 'Handlebars',
            amd: 'handlebars/runtime',
            commonjs2: 'handlebars/runtime',
            commonjs: 'handlebars/runtime'
        }
    }],
    module: {
        loaders: [
            { test: /\.handlebars$/, loader: 'handlebars-loader?runtime=handlebars/runtime' }
        ]
    }
};
于 2015-10-11T16:25:27.987 に答える