'未知导出提供'在webpack的输出文件中有意义

时间:2017-05-15 17:23:59

标签: javascript webpack webpack-2

当我在output.pathinfo中将true设置为webpack.config.js时,我会在输出文件中获得每个捆绑模块的深奥描述:

/* unknown exports provided */

这是什么意思?

编辑:

我一直在从typescript中找到导致webpack无法识别导出的代码(但是它能够推断出已经使用了哪些导出)。我调整了我的打字稿配置来解决这个问题(我已将module选项设置为ES2015)。

1 个答案:

答案 0 :(得分:1)

output.pathinfo为每个模块添加注释,以帮助您识别它们及其导出。您将看到模块的路径存在且在其上方,它显示模块的导出以及实际使用的模块。当模块没有导出时,它将显示onConfig

使用以下三个文件考虑此示例。

index.js (切入点)

unknown exports provided

<强> module.js

import { one } from './module';
import printNumber from './otherModule';

printNumber(one);

<强> otherModule.js

export const one = 1;
export const two = 2;
export const three = 3;

export default () => console.log('default export');

export default number => console.log(`The number is ${number}`); export const notUsed = 'not used'; 中没有导出,评论反映了这一点。由于它没有导出,它自动意味着使用所有导出。

index.js

另一方面,/* unknown exports provided */ /* all exports used */ /*!******************!*\ !*** ./index.js ***! \******************/ 有四个导出:module.jsdefaultonetwo。从这些导出中,只有three用于webpack包含的任何文件中(在这种情况下,它仅在one中导入)。评论告诉了我们这一点。

index.js

同样,/* exports provided: one, two, three, default */ /* exports used: one */ /*!*******************!*\ !*** ./module.js ***! \*******************/ 有两个导出otherModule.jsdefault,其中仅使用默认导出(再次在notUsed中)。

index.js

请注意,/* exports provided: default, notUsed */ /* exports used: default */ /*!************************!*\ !*** ./otherModule.js ***! \************************/ 会从import X from 'module'导入默认导出,并为其指定名称module

此信息在开发过程中非常有用,可以查看整个应用程序中实际使用的导出内容。在显示的示例中,很容易看到正在使用的内容,但在更大的应用程序中,您可能会发现此功能很有用。

注意:使用任何消除死代码的工具(例如UglifyJS)优化它时,将从捆绑中删除未使用的导出。