如何使Webpack识别动态导出

时间:2018-12-25 23:11:18

标签: javascript webpack webpack-4

使用Webpack v4构建时(在JS文件中使用View.OnUnhandledKeyEventListener),我看到以下警告:

babel-loader

Warning in ./src/components/Foo "export 'ADDENDUM' was not found in '../../types' ... 中的导入为:

./src/components/Foo

../../ types

import { ADDENDUM } from '../../types';

这不会引起构建错误,只是一个警告。但是警告是错误的,因为我正在导出import { each } from 'lodash'; export const typesDict = { ADDENDUM: 'addendum', }; each(typesDict, (type, typeConstant) => { exports[typeConstant] = type; }); (尽管是动态地),并且一切正常。

Webpack是否有办法处理这些动态导入,或至少关闭警告?我现在正在从Webpack v1升级,而v1则没有此问题(或者,如果存在,则某种程度上被隐藏了)。

还请注意:我不想使所有Webpack警告(例如via the devServer config)保持沉默。我只想让这种警告消失。

1 个答案:

答案 0 :(得分:0)

基于您的../../types文件,我假设您的方法是跳过再次写入exports对象中的组件。

代替静默警告,请尝试更简单的方法来解决此问题。由于您不想写两次相同的名称,因此请看我的示例。

不需要lodash,不使用循环,并且导出的常量只写入一次。

../../ types

export const ADDENDUM = 'addendum';
export const ADDENDUM2 = 'addendum2';
export const ADDENDUM3 = 'addendum3';

仅此而已,不再动态导入,不再警告。

更新:

您的代码确实有效,但是当您使用动态导出/导入时,编译器/捆绑程序会松散跟踪您的导出(在您的情况下),因为它们不检查导出对象的内容,因此您会收到警告,因为编译器(babel)在您的代码中找不到exports.ADDENDUM,所以只有知道它在那里,因此编译器认为您使用的是不存在的组件。

就进口而言,这是同样的故事,当require('/path/to/' + someVar + '/some.file.js')之类的东西出现时,webpack会发出相同类型的警告,因为webpack希望从中提取出一部分,但这并不是完整的途径webpack,它找不到文件,因为它是串联的字符串(动态导入)。 (我不知道这些年来是否发生了变化,但是我敢肯定您也完全了解/知道了这一点)