【问题标题】:Webpack css-loader not buildingWebpack css-loader 未构建
【发布时间】:2016-04-09 21:40:15
【问题描述】:

在我的 JSX 文件上使用 css-loader 加载 CSS 时遇到困难。我正在按照以下示例进行操作:

https://christianalfoni.github.io/react-webpack-cookbook/Loading-CSS.html

这是我的 JSX

import React from 'react';
import ReactDOM from 'react-dom';
import styles from './styles.css';
class Hello extends React.Component {
  render() {
    return <div>Hello world!</div>
  }
}

var el = document.getElementById('content')
var data = JSON.parse(el.getAttribute('data-attr'))
ReactDOM.render(<Hello data={data} />, el);`

这是我的 package.json

  "devDependencies": {
    "babel-core": "^6.3.26",
    "babel-loader": "^6.2.0",
    "babel-preset-es2015": "^6.3.13",
    "babel-preset-react": "^6.3.13",
    "css-loader": "^0.23.1",
    "exports-loader": "~0.6.2",
    "expose-loader": "~0.6.0",
    "grunt": "^0.4.5",
    "grunt-babel": "^6.0.0",
    "grunt-cli": "^0.1.13",
    "grunt-contrib-watch": "^0.6.1",
    "grunt-webpack": "^1.0.11",
    "history": "^1.17.0",
    "imports-loader": "~0.6.3",
    "jquery": "^2.1.4",
    "lodash": "~3.0.0",
    "react": "^0.14.5",
    "react-dom": "^0.14.5",
    "react-router": "^1.0.3",
    "style-loader": "^0.13.0",
    "webpack": "^1.12.9",
    "webpack-dev-server": "^1.14.0"
  },
  "dependencies": {
    "chunk-manifest-webpack-plugin": "0.0.1",
    "grunt-react": "^0.12.3"
  }

这是我的 Webpack.config.js

var path = require('path');
var webpack = require('webpack');

var config = module.exports = {
  // the base path which will be used to resolve entry points
  context: __dirname,
  // the main entry point for our application's frontend JS
  entry: './app/frontend/javascripts/entry.js',
  stats: {
        // Configure the console output
        colors: true,
        modules: true,
        reasons: true
    },
  progress: true,
  keepalive: true,
  module: {
    loaders: [
      {
        test: /\.js?$/,
        exclude: /(node_modules|bower_components)/,
        loader: 'babel-loader', // 'babel-loader' is also a legal name to reference
        query: { presets: ['es2015', 'react'] }
      },
      { test: /\.css$/, loader: "style-loader!css-loader" }
    ]
  },
  output: {
    // this is our app/assets/javascripts directory, which is part of the Sprockets pipeline
    path: path.join(__dirname, 'app', 'assets', 'javascripts'),
    // the filename of the compiled bundle, e.g. app/assets/javascripts/bundle.js
    filename: 'bundle.js',
    // if the webpack code-splitting feature is enabled, this is the path it'll use to download bundles
    publicPath: '/assets',
    devtoolModuleFilenameTemplate: '[resourcePath]',
    devtoolFallbackModuleFilenameTemplate: '[resourcePath]?[hash]',
  },
  resolve: {
    // tell webpack which extensions to auto search when it resolves modules. With this,
    // you'll be able to do `require('./utils')` instead of `require('./utils.js')`
    extensions: ['', '.js'],
    // by default, webpack will search in `web_modules` and `node_modules`. Because we're using
    // Bower, we want it to look in there too
    modulesDirectories: [ 'node_modules', 'bower_components' ],
  },

  plugins: [
    // we need this plugin to teach webpack how to find module entry points for bower files,
    // as these may not have a package.json file
    new webpack.ResolverPlugin([
      new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin('.bower.json', ['main'])
    ]),
    new webpack.ProvidePlugin({
      $: 'jquery',
      jQuery: 'jquery',
    }),
    //new webpack.optimize.CommonsChunkPlugin('common-bundle.js'),
    //new webpack.optimize.CommonsChunkPlugin('public-bundle.js')
  ]
};

这是我的styles.css

#div {
 background-color: red;
}

运行我的 grunt 任务以运行附加的“webpack”得到的输出: 您可以看到它在哪里显示 CSS 构建失败。

       cjs require fbjs/lib/mapObject [154] ./~/react/lib/ReactDOMFactories.js 18:16-45
 [157] ./~/react/lib/onlyChild.js 1.21 kB {0} [built]
       cjs require ./onlyChild [153] ./~/react/lib/ReactIsomorphic.js 24:16-38
 [158] ./~/react/lib/deprecated.js 1.77 kB {0} [built]
       cjs require ./deprecated [3] ./~/react/lib/React.js 19:17-40
 [159] ./~/react-dom/index.js 63 bytes {0} [built]
       cjs require react-dom [0] ./app/frontend/javascripts/entry.js 11:16-36

ERROR in ./app/frontend/javascripts/styles.css
Module parse failed: /Users/Booboo/Projects/Xeon/app/frontend/javascripts/styles.css Line 1: Unexpected token {
You may need an appropriate loader to handle this file type.
| div {
|  background-color: red;
| }
 @ ./app/frontend/javascripts/entry.js 5:0-23
Warning: Task "webpack:dev" failed. Use --force to continue.

Aborted due to warnings.
Booboo$ grunt react && grunt webpack && grunt watch

【问题讨论】:

  • 在我的 webpack.config 中,我通常通过 "loader": "style!css" (不带 -loader)来引用加载器。你试过了吗?
  • 原来没有一个加载器似乎工作:(。如果我尝试将导入语句更改为需要一个 jsx 文件,它也会给出相同的结果。会不会与其他依赖项发生冲突?

标签: javascript css reactjs webpack css-loader


【解决方案1】:

我也遇到过这个问题。 但就我而言,我发现我的加载器写成

{test: '/\.css$/', loader: 'style!css'}

应该正确写成 {test: /\.css$/, loader: 'style!css'}

注意 /.css$/ 周围的 ''

我觉得这对你有帮助。

【讨论】:

    【解决方案2】:

    当你说

    import styles from './styles.css';
    

    您正在尝试导入一个未作为模块导出的模块。

    试试

    import './styles.css';
    

    改为使其成为简单的文件导入。

    【讨论】:

    • 当我尝试也需要一个 jsx 文件时,我似乎得到了相同的结果
    • 刚刚注意到你的配置应该是test: /\.jsx?$/
    猜你喜欢
    • 1970-01-01
    • 2017-10-04
    • 2015-11-19
    • 2017-10-27
    • 2017-07-21
    • 2017-07-15
    • 1970-01-01
    • 2018-07-12
    • 2019-06-26
    相关资源
    最近更新 更多