Babel.js Webpack无法解释文件?

p8h8hvxi  于 2022-12-08  发布在  Babel
关注(0)|答案(1)|浏览(161)

我尝试使用webpack和react和ts来优化我的网站,但是我遇到了一个障碍。下面是我的webpack.config.js文件,我相信它是正确的,但也许不是?下面是错误的图片。

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
    entry: path.resolve(__dirname, '..', './src/index.tsx'),
    resolve: {
        extensions: ['.tsx', '.ts', '.js']
    },
    module: {
        rules: [
            {
                test: /\.js|\.tsx$/,
                exclude: /node_modules/,
                use: [
                    {
                        loader: 'babel-loader',
                    },
                ],
            },
        ],
    },
    output: {
        path: path.resolve(__dirname, '..', './build'),
        filename: 'bundle.js',
    },
    mode: 'development',
    plugins: [
        new HtmlWebpackPlugin({
            template: path.resolve(__dirname, '..', './src/index.html'),
        }),
    ],
}

CSS和webp文件也会出现这种情况,但您只能在屏幕截图中看到CSS。
文件结构如下:

- build
- src
    - App.tsx
    - index.tsx
    - index.html
    - react-app-env.d.ts
    - css
        - animations.css
        - App.css
        - index.css
        - nav.css
    - images
        - hero.webp
        - image1.webp
        - logo.webp
    - webpack
        - webpack.config.js
    - .babel.rc
    - package.json
    - tsconfig.json
    - yarn.lock

希望这能为解决方案提供足够的信息?谢谢!

ioekq8ef

ioekq8ef1#

缺少处理CSS文件的加载程序。

就像你已经在module.rules数组中添加了加载器来处理.js.tsx文件一样,同样你也必须添加适当的文件加载器来处理.css文件。
为此,你需要安装至少两个npm包,css-loaderstyle-loadercss-loader读取所有CSS文件,并管理导入,url路径,字体导入。其他的手style-loaderbundle.js获取CSS,并将其作为不单独的CSS文件放入DOM。

安装所需的装载机。

npm install style-loader css-loader --save-dev

将已安装的加载程序配置到Webpack中。
module.exports = {
    ...,
    module: {
        rules: [
            {
                test: /\.js|\.tsx$/,
                exclude: /node_modules/,
                use: [
                    {
                        loader: 'babel-loader',
                    },
                ],
            },
            {
                test: /\.css$/,
                use: [
                    'style-loader',
                    'css-loader'
                ]
            }
        ],
    },
    ...
}
您可以提取CSS并将其放在单独的.css文件中。

因为css-loader管理文件中的css,而style-loader帮助把它放在dom中。如果你想要单独的css文件,你需要为此添加插件。
您所需要的只是mini-css-extract-plugin

安装所需的软件包

npm install mini-css-extract-plugin --save-dev

将插件配置安装到Webpack中。

1.添加由MiniCssExtractPlugin提供的样式加载程序,而不是style-loader,将style-loader更改为MiniCssExtractPlugin.loader
1.将MiniCssExtractPlugin添加到插件数组。

const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
    entry: path.resolve(__dirname, '..', './src/index.tsx'),
    resolve: {
        extensions: ['.tsx', '.ts', '.js']
    },
    module: {
        rules: [
            {
                test: /\.js|\.tsx$/,
                exclude: /node_modules/,
                use: [
                    {
                        loader: 'babel-loader',
                    },
                ],
            },
            {
                test: /\.css$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader'
                ]
            }
        ],
    },
    output: {
        path: path.resolve(__dirname, '..', './build'),
        filename: 'bundle.js',
    },
    mode: 'development',
    plugins: [
        new HtmlWebpackPlugin({
            template: path.resolve(__dirname, '..', './src/index.html'),
        }),
        new MiniCssExtractPlugin()
    ],
}

相关问题