即使不需要模块,Webpack 也会为 node_modules 中的文件提供“模块没有导出的成员...”错误

Posted

技术标签:

【中文标题】即使不需要模块,Webpack 也会为 node_modules 中的文件提供“模块没有导出的成员...”错误【英文标题】:Webpack gives me "Module has no exported member..." errors for files in node_modules even when no module is required 【发布时间】:2017-03-01 02:31:21 【问题描述】:

我对 Webpack 有疑问。它正确编译和摇树,但给了我数百个错误,因为它出于某种原因对 node_modules 中的类型定义做了一些事情,即使它不应该这样做,因为在我的入口点中不需要/导入任何模块。

我的 webpack.config.js:

const ForkCheckerPlugin = require("awesome-typescript-loader").ForkCheckerPlugin;
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const webpack = require("webpack");

module.exports = 
    entry:
    
        browser: __dirname + "/source/index.tsx"
    ,

    module:
    
        loaders:
        [
             test: /(\.ts|\.tsx)$/, loader: "awesome-typescript-loader" ,
             test: /\.css$/, loader: ExtractTextPlugin.extract( loader: "css-loader?modules" ) ,
             test: /\.png$/, loader: "url-loader" ,
             test: /\.jpg$/, loader: "url-loader" ,
             test: /\.json$/, loader: "json-loader" ,
        ]
    ,

    plugins:
    [
        new webpack.DefinePlugin( "process.env":  NODE_ENV: JSON.stringify("production")  ),
        new webpack.optimize.DedupePlugin(),
        new webpack.optimize.UglifyJsPlugin( compressor:  warnings: false  ),
        new webpack.optimize.CommonsChunkPlugin( name: "vendor", minChunks: module => /node_modules/.test(module.resource) ),
        new ExtractTextPlugin("browser.css"),
    ],

    output:
    
        filename: "[name].js",
        chunkFilename: "[name].js",
        path:  __dirname + "/build/browser/"
    
;

我的入口点 (source/index.tsx) - 基本上什么都没有:

console.log("Test");

它给我的错误(缩短,它们都相似):

ERROR in [default] C:\Users\Tom\VSCodeProjects\personal\webpack-test\node_modules\@types\react-router\lib\match.d.ts:12:15
Module '"C:/Users/Tom/VSCodeProjects/personal/webpack-test/node_modules/history/lib/index"' has no exported member 'History'.

ERROR in [default] C:\Users\Tom\VSCodeProjects\personal\webpack-test\node_modules\@types\react-router\lib\match.d.ts:16:80
Module '"C:/Users/Tom/VSCodeProjects/personal/webpack-test/node_modules/history/lib/index"' has no exported member 'Location'.

ERROR in [default] C:\Users\Tom\VSCodeProjects\personal\webpack-test\node_modules\@types\react-router\lib\useRouterHistory.d.ts:1:9
Module '"C:/Users/Tom/VSCodeProjects/personal/webpack-test/node_modules/history/lib/index"' has no exported member 'History'.

ERROR in [default] C:\Users\Tom\VSCodeProjects\personal\webpack-test\node_modules\@types\react-router\lib\useRouterHistory.d.ts:1:18
Module '"C:/Users/Tom/VSCodeProjects/personal/webpack-test/node_modules/history/lib/index"' has no exported member 'HistoryOptions'.

ERROR in [default] C:\Users\Tom\VSCodeProjects\personal\webpack-test\node_modules\@types\react-router\lib\useRouterHistory.d.ts:1:34
Module '"C:/Users/Tom/VSCodeProjects/personal/webpack-test/node_modules/history/lib/index"' has no exported member 'HistoryQueries'.

ERROR in [default] C:\Users\Tom\VSCodeProjects\personal\webpack-test\node_modules\@types\react-router\lib\useRouterHistory.d.ts:1:50
Module '"C:/Users/Tom/VSCodeProjects/personal/webpack-test/node_modules/history/lib/index"' has no exported member 'CreateHistory'.

ERROR in [default] C:\Users\Tom\VSCodeProjects\personal\webpack-test\node_modules\@types\react-router\lib\useRoutes.d.ts:4:47
Module '"C:/Users/Tom/VSCodeProjects/personal/webpack-test/node_modules/history/lib/index"' has no exported member 'CreateHistory'.

ERROR in [default] C:\Users\Tom\VSCodeProjects\personal\webpack-test\node_modules\@types\react-router\lib\useRoutes.d.ts:4:68
Module '"C:/Users/Tom/VSCodeProjects/personal/webpack-test/node_modules/history/lib/index"' has no exported member 'CreateHistory'.

【问题讨论】:

【参考方案1】:

您可以尝试在您的tsconfig.json 中添加"exclude": [ "node_modules" ]

【讨论】:

感谢您的回答,遗憾的是这不起作用,没有任何改变。 嗯,也许尝试在module.loaders中设置exclude: ['node_modules'] 我试过这些: - test: /(\.ts|\.tsx)$/, loader: "awesome-typescript-loader", exclude: ['node_modules'] - test: /(\.ts|\.tsx)$/, loader: "awesome-typescript-loader", options: exclude: ['node_modules'] - /node_modules/[ /node_modules/ ] 而不是 'node_modules' 但没有任何效果。 :// 您是否尝试同时设置两者?这是我目前的配置。 也许他们的 Github 上的问题有帮助?已经有一个线程:github.com/s-panferov/awesome-typescript-loader/issues/209【参考方案2】:

我的建议是检查每个 webpack 加载器,并确保它们不会以某种方式导致这种情况发生。我遇到了类似的问题,我能够通过使用与以前不同的 CSS 加载器 (sass) 来解决它。

【讨论】:

以上是关于即使不需要模块,Webpack 也会为 node_modules 中的文件提供“模块没有导出的成员...”错误的主要内容,如果未能解决你的问题,请参考以下文章

即使数据存在,`User` 类型的字段也会为 Query 返回 `null`

即使应用程序关闭,Xamarin 也会为数据同步形成后台服务

即使禁用 csrf,Spring Boot 也会为移动请求抛出 403

webpack入门学习

即使用户有一些播放列表,Spotify Web API 也会为用户播放列表返回空项目

在 Python 中,即使键存在,编译器也会为 datetimeIndex 函数抛出键错误