我试图得到css要求在webpack使用ExtractTextPlugin工作,但没有成功
我想要一个单独的CSS文件,而不是内联任何CSS。
这里是我的webpack配置:
- var path = require('path');
- var webpack = require('webpack');
- var ExtractTextPlugin = require('extract-text-webpack-plugin');
- module.exports = {
- devtool: 'eval',entry: [
- 'webpack-dev-server/client?http://localhost:3000','webpack/hot/only-dev-server','./scripts/index'
- ],output: {
- path: path.join(__dirname,'build'),filename: 'bundle.js',publicPath: '/scripts/'
- },plugins: [
- new webpack.HotModuleReplacementPlugin(),new webpack.NoErrorsPlugin(),new ExtractTextPlugin('styles/styles.css',{
- allChunks: true
- })
- ],resolve: {
- extensions: ['','.js','.jsx']
- },module: {
- loaders: [{
- test: /\.jsx?$/,loaders: ['react-hot','babel'],include: path.join(__dirname,'scripts')
- },{
- test: /\.css$/,loader: ExtractTextPlugin.extract('style-loader','css-loader')
- }]
- }
- };
index.js:
- import React from 'react';
- import App from './App';
- React.render(<App />,document.getElementById('root'));
App.js:
- import React from 'react';
- require('../styles/app.css');
- export default class App extends React.Component {
- render() {
- return (
- <h1>Hello,world.</h1>
- );
- }
- }
index.html:
- <html>
- <head>
- <link rel="stylesheet" href="/styles/styles.css">
- </head>
- <body>
- <div id='root'></div>
- </body>
- <script src="/scripts/bundle.js"></script>
- </html>
styles.css返回404
任何想法这里可能会出错。如果我不使用ExtractTextPlugin,只需在config中这样做:
- module: {
- loaders: [
- { test: /\.css$/,loader: "style-loader!css-loader" }
- ]
- }
然后我得到的CSS应用于页面正确,但显然这不是来自一个CSS文件
这是我第一次尝试使用webpack,所以可能做一些noob错误
有任何想法吗?
解决方法
ExtractTextPlugin需要在两个地方添加:在加载程序和作为插件。这里是从
stylesheets documentation拉出的例子。
- // webpack.config.js
- var ExtractTextPlugin = require("extract-text-webpack-plugin");
- module.exports = {
- // The standard entry point and output config
- entry: {
- posts: "./posts",post: "./post",about: "./about"
- },output: {
- filename: "[name].js",chunkFilename: "[id].js"
- },module: {
- loaders: [
- // Extract css files
- {
- test: /\.css$/,loader: ExtractTextPlugin.extract("style-loader","css-loader")
- },// Optionally extract less files
- // or any other compile-to-css language
- {
- test: /\.less$/,"css-loader!less-loader")
- }
- // You could also use other loaders the same way. I. e. the autoprefixer-loader
- ]
- },// Use the plugin to specify the resulting filename (and add needed behavior to the compiler)
- plugins: [
- new ExtractTextPlugin("[name].css")
- ]
- }