0

我希望能够import在我的反应应用程序中不仅用于 js/jsx 文件,还可以用于 css 文件。根据我的阅读,最好的方法是使用extract-text-webpack-plugin将导入的 css 文件并将它们捆绑在一起。

我已经对其进行了设置,以便它生成我捆绑的 css 文件,但由于某种原因,每次我加载我的页面时都会出现语法错误:

SyntaxError: MyWebpage/views/global.css: Unexpected token, expected ; (1:5)
> 1 | body {
    |      ^
  2 |     margin: 0;
  3 | }

我的设置如下所示:

webpack.config.js

const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');


const config = {
  entry: ['babel-polyfill', './views/Index.jsx'],
  output: {
    path: path.resolve(__dirname, 'public'),
    filename: 'bundle.js',
    publicPath: '/public'
  },
  module: {
    rules: [
      { test: /\.(jsx|js)$/, exclude: /node_modules/ , use: 'babel-loader' },
      { 
        test: /\.css$/,
        use: ExtractTextPlugin.extract({
          fallback: "style-loader",
          use: "css-loader"
        })
      }
    ]
  },
  plugins: [
    new ExtractTextPlugin("styles.css"),
  ]
};

module.exports = config;

入口点./views/Index.js是我要导入我的 css 文件的地方:

索引.js

import React from 'react';
import Layout from './Layout.jsx';
import PageContent from './PageContent.jsx';
import './global.css';

class Index extends React.Component {
  render() {
    return (
        <Layout title={this.props.title}>
            <PageContent />
        </Layout>
    );
  }
}

export default Index;

在导入的./Layout.jsx文件中,我使用 a<link>在我的页面中包含捆绑的 css 文件:

布局.jsx

import React from 'react';

class Layout extends React.Component {
    render() {
        return (
            <html>
            <head>
                <title>{this.props.title}</title>
                <link rel="stylesheet" href="styles.css" />
            </head>
            <body> 
                <div id="root">
                    {this.props.children}
                </div>
                <script type="text/javascript" src="./bundle.js"></script>
            </body>
            </html>
        );
    }
}

export default Layout;

我很困惑,因为看起来我的应用程序构建良好,但是当我尝试访问我的网页时,我不断收到语法错误。

谁能帮我理解我做错了什么?

4

2 回答 2

0

it seems like babel or webpack is not loading the loaders.

This variant helps me with it (just include into webpack.config.js):

    require.extensions['.css'] = () => {
      return;
    };

More here... [link]

于 2018-08-17T10:38:01.790 回答
0

下面的加载器似乎有问题是 webpack.config.js 文件适用于 jsx 和 css 加载器的示例:

module.exports = {
    entry: './app/index.js',
    output: {
        path: __dirname,
        filename: 'dist/bundle.js'
    },
    devServer: {
        inline: true,
        port: 3000
    },
    module: {
        loaders: [{
            test: /.jsx?$/,
            loader: 'babel-loader',
            exclude: /node_modules/,
            query: {
                presets: ['es2015', 'react', 'react-hmre']
            }
        },
        {
                test: /\.scss$/,
                loaders: [ 'style', 'css', 'sass' ]
            }]
    }
}; 
于 2017-09-15T09:54:12.097 回答