避免使用webpack + handlebars loader捆绑lib依赖项

Que*_*Roy 6 javascript loader handlebars.js webpack umd

我正在使用把手模板编写一个库,我想使用Webpack捆绑它.我正在使用把手加载器,以便我可以要求并预编译模板.

但是我不想把把手(也没有把手/运行时)包含在我编译的库中,因此,我想将它们设置为外部.

这是我的配置文件:

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' }
        ]
    }
};
Run Code Online (Sandbox Code Playgroud)

不幸的是它不起作用,车把装载机仍然使把手/运行时捆绑...

我相信这是因为我不直接需要把手/运行时,而是在加载器添加的代码中需要它.

有没有办法将其标记为外部?

编辑:我知道我需要把手/运行时来编译我的模板.但是当我构建一个库时,我希望它由库的用户提供而不是包含在内.这样,如果我的用户也在使用Handlebars,则库不会加载两次.我认为图书馆避免捆绑任何依赖是一种很好的做法(在我看来,这是我们经常看到的东西).

Que*_*Roy 4

车把装载机团队帮我解决了这个问题

问题是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' }
        ]
    }
};
Run Code Online (Sandbox Code Playgroud)