CSS 模块 - 意外标记

Posted

技术标签:

【中文标题】CSS 模块 - 意外标记【英文标题】:CSS Modules - unexpected token 【发布时间】:2017-01-19 01:09:41 【问题描述】:

我正在尝试使 CSS 模块与 React 组件一起使用。我的代码如下:

import styles from './style.css';

const Header = () => 
  return (
    <header className=styles.main></header>
  )
;

export default Header;

CSS 只是

.main  background: red; 

和 webpack 配置:

var ExtractTextPlugin = require('extract-text-webpack-plugin');
var BrowserSyncPlugin = require('browser-sync-webpack-plugin');
var WebpackNotifierPlugin = require('webpack-notifier');
var precss = require('precss');
var autoprefixer = require('autoprefixer');
var path = require('path');

var sassLoaders = [
  'css-loader?modules',
  'postcss-loader?modules',
  'sass-loader?sourceMaps&modules&includePaths[]=' + path.resolve(__dirname, './sass')
];

var config = 
  entry: './app/index.js',
  output: 
    path: 'public',
    filename: 'index.js'
  ,
  sassLoader: 
    includePaths: path.resolve(__dirname, './sass')
  ,
  plugins: [
    new WebpackNotifierPlugin(
      title: 'Webpack',
      alwaysNotify: true
    ),
    new ExtractTextPlugin('style.css'),
    new BrowserSyncPlugin(
      port: 7000,
      ui: false,
      proxy: 'http://localhost:3000/'
    )
  ],
  module: 
    loaders: [
      
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel',
        query: 
          presets: ['es2015', 'react', 'stage-0']
        
      ,
      
        test: /\.css$/,
        loader: 'style!css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]'
      ,
      
        test: /\.scss$/,
        loader: ExtractTextPlugin.extract('style-loader', sassLoaders.join('!'))
      
    ]
  ,
  postcss: function() 
    return [
      precss,
      autoprefixer( browsers: ['last 2 versions'] )
    ];
  
;

module.exports = config;

当我想运行我的代码时会出现问题。无论我是否包含scsscss 文件,我总是得到

[0] SyntaxError: style.css: Unexpected token (1:0)
[0] > 1 | .main 
[0]     | ^
[0]   2 |   background: red;
[0]   3 | 

我能做什么?

【问题讨论】:

我很确定你不需要将你的类添加为对象,如果你在 webpack 上构建和使用加载器,你可以简单地使用你的类:className="main" 【参考方案1】:

CSS 模块为以.module.css 扩展名结尾的文件打开。因此,将 CSS 文件从 style.css 重命名为 style.module.css 并在导入 Header React 组件时更改路径。

像这样:

import styles from './style.module.css';

【讨论】:

【参考方案2】:

您需要 css-modules-transform。您可以按照以下步骤添加它:

npm i -D babel-plugin-css-modules-transform

打开您的 .babelrc 文件(或 babel.config.js),并在插件部分添加“css-modules-transform”

“插件”:[ “变换对象休息传播”, “css 模块转换” ]

【讨论】:

【参考方案3】:

你不需要定义导入的名称,你只需像这样导入你的 css 的路径:

import './style.css';

然后你的 webpack 就会知道该做什么。否则它会认为你正在尝试导入一些 js 模块并为语法错误而哭泣。

【讨论】:

以上是关于CSS 模块 - 意外标记的主要内容,如果未能解决你的问题,请参考以下文章

UglifyJS 抛出意外的标记:keyword (const) with node_modules

使用 FS 读取字符串返回此错误:位置 0 处 JSON 中的意外标记 r

具有相同类名的不同css模块互相覆盖

使用 Nodejs Sharp 模块时出错。模块解析失败:意外字符 '' (1: 0)

如何避免“意外模块'HttpClientModule'...注释”错误?

模块解析失败:意外的令牌 Reactjs?