【问题标题】:Moment is undefined when bundled捆绑时的时刻未定义
【发布时间】:2018-09-22 21:42:09
【问题描述】:

我正在尝试捆绑 moment.js,但捆绑后它一直返回 undefined:

我的网页包

var path = require("path");
var webpack = require("webpack");

module.exports = {
    mode: "development",
    entry: {
        frb: "./src/app/loader.js"
    },
    output: {
        path: path.resolve(__dirname, "./src/lib"),
        filename: "bundle.js"
    },
    module: {
        rules: [
            {
                test: /\.(js|jsx)$/,
                exclude: /(node_modules)/,
                loader: "babel-loader",
                query: {
                    presets: [
                        [
                            "@babel/preset-env",
                            {
                                targets: {
                                    chrome: "58",
                                    ie: "9"
                                }
                            }
                        ]
                    ]
                }
            }
        ]
    },
    plugins: [
        // Ignore all locale files of moment.js
        new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
        new webpack.ProvidePlugin({
            moment: "moment"
        })
    ]
};

我的 loader.js 只是包含:

require("moment")

【问题讨论】:

  • 你看过this thread吗?
  • 我试过了,但没有解决问题。
  • 你为什么在loader.js中使用require("moment"),同时又使用webpack.IgnorePluginwebpack.ProvidePlugin?这一切似乎都是矛盾的。尝试删除这两个插件并在您的代码中简单地执行const moment = require("moment")
  • 因为我不知道自己在做什么,说明也很少。

标签: javascript webpack momentjs bundle


【解决方案1】:

从你的 webpack 配置中删除整个插件部分,看看它是否有效。 我阅读的问题/文档很少,最后一部分只是尝试从时刻导入最少的代码,应该与特定的时刻版本一起使用。

查看以下链接。 https://webpack.js.org/plugins/ignore-plugin/ https://github.com/moment/moment/issues/2373

我建议的另一件事是尝试在你的 loader.js 中除了 moment 之外的其他模块,看看它是否是你的包的一部分。只是为了验证这个问题只是瞬间或所有模块。如果所有模块都出现这种情况,那么配置中还有其他不正确的地方。

【讨论】:

    猜你喜欢
    • 2016-01-05
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 2012-09-27
    • 2018-09-09
    • 1970-01-01
    • 2017-11-20
    相关资源
    最近更新 更多