如何防止moment.js用webpack加载语言环境?

2020/10/16 19:21 · javascript ·  · 0评论

moment.js使用webpack时,有什么方法可以阻止加载所有语言环境(我只需要英语)?我正在查看源代码,似乎如果hasModule为webpack定义了它,那么它将始终尝试require()每个语言环境。我很确定这需要拉请求才能解决。但是,有什么办法可以通过webpack配置修复此问题?

这是我的webpack配置以加载momentjs:

resolve: {
            alias: {
                moment: path.join(__dirname, "src/lib/bower/moment/moment.js")
            },
        },

然后,只要我需要,我就可以做require('moment')这可以工作,但会在我的捆绑包中添加约250 kB的不需要的语言文件。另外我正在使用momentjs和gulp的凉亭版本。

另外,如果webpack配置无法解决此问题,则这里是指向加载语言环境的函数的链接我尝试&& module.exports.loadLocalesif语句中添加内容但我想webpack实际上无法正常工作。它只是require没什么不管是什么。我认为它现在使用了正则表达式,所以我真的不知道您什至会去修复它。

该代码require('./locale/' + name)可以使用目录中的每个文件locale因此,webpack将每个文件都包含在包中作为模块。它不知道您使用哪种语言。

两个插件可用于为webpack提供更多有关应在包中包含哪个模块的信息:ContextReplacementPluginIgnorePlugin

require('./locale/' + name)称为上下文(包含表达式的require)。webpack从此代码片段中推断出一些信息:目录和正则表达式。在这里:directory = ".../moment/locale" regular expression = /^.*$/因此,默认情况下locale会包含目录中的每个文件

ContextReplacementPlugin允许覆盖推断的信息,即提供了一个新的正则表达式(选择要包括语言)。

另一种方法是使用忽略需求IgnorePlugin

这是一个例子:

var webpack = require("webpack");
module.exports = {
  // ...
  plugins: [
    new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /de|fr|hu/)
    // new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
  ]
};

在我们的项目中,我加入了这样的时刻:import moment from 'moment/src/moment';这似乎可以解决问题。不过,我们对矩的使用非常简单,因此我不确定该SDK是否存在任何不一致之处。我认为这行得通,因为WebPack不知道如何静态查找语言环境文件,因此会收到警告(通过在上添加一个空文件夹很容易隐藏moment/src/lib/locale/locale),但不包括语言环境。

适当的模块化moment库将在某个时候版本3一起出现,因此当前我正在使用angular-cli,而--eject我最终没有使用https://github.com/ksloan/moment-mini之类的东西import * as moment from 'moment-mini';

根据Adam McCrmick的回答,您很接近,将别名更改为:

resolve: {
    alias: {
        moment: 'moment/src/moment'
    },
},

使用webpack2最新版本的时刻,您可以执行以下操作:

import {fn as moment} from 'moment'

然后webpack.config.js执行以下操作:

resolve: {
    packageMains: ['jsnext:main', 'main']
}

这是在NPM安装程序中使用后安装脚本的另一种解决方案

您可以在package.json文件中添加一行

{
  "scripts": {
    ...
    "postinstall": "find node_modules/moment/locale -type f -not -name 'en-gb.js' -not -name 'pl.js' -printf '%p\\n' | xargs rm"
    ...
  }
}

结果,npm install安装完软件包后,会立即删除不需要的语言环境

就我而言en-gbpl语言环境将保持捆绑。

如果已经有了postinstall脚本,则可以将脚本添加到现有命令中:

{
  "scripts": {
    ...
    "postinstall": "previous_command && find node_modules/moment/locale -type f -not -name 'en-gb.js' -not -name 'pl.js' -printf '%p\\n' | xargs rm"
    ...
  }
}
本文地址:http://javascript.askforanswer.com/ruhefangzhimoment-jsyongwebpackjiazaiyuyanhuanjing.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!