【问题标题】:Webpack import a node module in scriptWebpack 在脚本中导入节点模块
【发布时间】:2017-03-16 09:26:12
【问题描述】:

我有一个 Webpack angular 2 应用程序,我有一个使用 Moment 的库的日期选择器模块依赖项。问题是,如果我不像这样导入它:

<script src="./../node_modules/moment/min/moment.min.js"></script>

如果我想使用它,则会引发 moment is not defined 错误。我尝试使用 require 导入时刻,但没有考虑在内。

问题是 script src 标签在本地工作,但在 webpack 构建的版本中,我们需要使用 node_modules 部署路径不再存在。除了在 lib 文件夹中硬粘贴 moment.min.js 之外,还有其他方法吗?

【问题讨论】:

    标签: javascript angular webpack


    【解决方案1】:

    在 webpack.conf.js 中添加如下代码:

    resolve: {
        alias: {
            'moment': 'moment/min/moment.min'
        }
    }
    

    现在你可以在你的 js 文件中简单地做,require('moment')

    注意:默认情况下,webpack 会搜索 node_modules 文件夹中的文件。您可以使用解析对象的modules 属性指示它查看特定位置。 生成的代码如下所示:

    resolve: {
        modules: ['lib/','some_folder/node_modules'...],
        alias: {
            'moment': 'moment/min/moment.min'
        }
    }
    

    【讨论】:

    • 感谢您的回答,该应用程序已编译并且似乎已被考虑,但日期选择器仍然不想考虑它,除非使用导入 :(
    • @guigui 你能分享错误代码吗?另外,您在配置文件中传递的上下文是什么?
    • 所以在我的 app.component.ts 中,我确实在顶部放了一个 require('moment'),我还在 webpack conf 文件的解析中放了 alias: { 'moment': 'moment/moment' },并且对于错误消息我收到了Error in ./Ng2DatetimePickerComponent class Ng2DatetimePickerComponent - inline template:36:4 caused by: moment is not defined
    • 现在你可以简单地在你的 js 文件中使用 require('moment') - 不,你不能。像大多数库一样,它是 UMD 模块,它不会在模块化环境中公开全局。所以它应该被导入到使用它的文件中。所以我不明白为什么应该在这里使用alias。应该像对待任何其他 JS 库一样对待它,可能使用 TS 类型。
    • @guigui 不要依赖全局变量。在使用它的文件中执行const moment = require('moment')
    猜你喜欢
    • 2018-01-27
    • 2019-11-03
    • 1970-01-01
    • 2020-01-06
    • 2012-11-03
    • 2017-08-25
    • 2018-11-06
    • 1970-01-01
    • 2018-07-04
    相关资源
    最近更新 更多