使用 Moment TimeZone CDN 配置 WebPack

Configuring WebPack with Moment TimeZone CDN

我正在使用 WebPack 4 构建我的 TypeScript 应用程序。

我的一个模块使用 moment-timezone 库,例如...

import * as moment from 'moment-timezone';
$('#label-locale').text(moment.locale());

这按预期工作。

为了更好地利用缓存,我想从 内容分发网络 (CDN) 中引用 momentmoment-timezone 并添加了关注我的 HTML 页面:

<script src="https://code.jquery.com/jquery-3.3.1.min.js"
        integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
        crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment-with-locales.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data.min.js"></script>

我也修改了webpack.config.js如下:

module.exports = {
    externals: {
        'jquery': 'jQuery',
        'moment': 'moment-timezone'
    }
};

现在,当我 运行 我的代码时,出现以下错误:

ReferenceError: timezone is not defined

我是 WebPack 的新手,尝试过将 'timezone': 'moment-timezone' 添加到 externals 但没有成功。

任何 help/direction 将不胜感激。

我想多了。 moment-timezone 实际上 'just' 扩展了 moment 对象以包含 moment.tz,所以我所要做的就是修改 webpack.config.js 如下:

module.exports = {
    externals: {
        'jquery': 'jQuery',
        'moment-timezone': 'moment'
    }
};

因此,不是 WebPack 有效地 构建 来自 node_modules/moment-timezone 的整个定义树, moment 对象已经被 CDN 更新参考。至少,我认为这就是正在发生的事情。