javascript - 带有 webpack 的 Intl.js polyfill/shim?

标签 javascript reactjs webpack polyfills

我正在使用 React-Intlwebpack我需要 Intl shim 以支持 Safari 和 IE,但我不想为已经支持 Intl spec 的浏览器加载它.

polyfill 非常大 (900kb),我如何确保它只在不支持它的浏览器中加载?

最佳答案

您需要做一些事情。

  1. 确保要求 intl/Intl 加载核心库而不是所有相关国家/地区。这会将库的大小从大约 900kb 减少到大约 150kb。

  2. 使用 webpack 的 require.ensurerequire([]) 函数仅在需要时动态要求 Intl.js。这将为 Intl.js 文件创建一个单独的包,该文件将根据需要加载。

lib/shim.js

// shim for Intl needs to be loaded dynamically
// so we callback when we're done to represent
// some kind of "shimReady" event
module.exports = function(callback) {
    if (!window.Intl) {
        require(['intl/Intl'], function(Intl) {
            window.Intl = Intl;
            callback();
        });
    } else {
        setTimeout(callback, 0); // force async
    }
};

app.js

var shimReady = require('lib/shim');
shimReady(startApp);

注意:您可能还需要访问特定国家/地区的信息和属性。对于我的基本需求,我实际上并不需要这些数据,但如果您确实需要,请务必阅读 Intl.js 网站上的部分 loading locale data .

关于javascript - 带有 webpack 的 Intl.js polyfill/shim?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29804786/

相关文章:

reactjs - 仅包含打包包 ReactJS 中使用过的导入

javascript - 如何禁用 storybook 的 webpack 的 eslint-loader?

javascript - 如何迭代 jQuery 对象并等待事件?

javascript - AngularJs:-在ng类的三元运算中添加多个条件

javascript - setState 钩子(Hook)中的 Mutate prevState 更新 View 而不重新渲染。为什么?

javascript - 我如何将 CSS 过渡(例如淡入淡出)应用于 React 中的元素列表,以便它们的动画在渲染时一个接一个地排序?

Webpack@4.0.0 : "Module parse failed. You may need an appropriate loader to handle this file type" - though using css-loader and style-loader

javascript - jqPlot - 条形图 - 将最高值设置为图表顶部

javascript - 如何判断鼠标是否悬停在元素上

reactjs - 样式化组件的第 N 个子级不工作