0

在我的项目中,我将 Webpack 与 React 和 NodeJS 一起使用。我想生成一个bundle.jsstyle.css文件。目前我有以下代码:

var webpack = require('webpack')
var ExtractTextPlugin = require('extract-text-webpack-plugin')

module.exports = {
  entry: './index.js',

  output: {
    path: 'public',
    filename: 'bundle.js',
    publicPath: ''
  },

  module: {
    loaders: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        query: {
          presets: ['react', 'es2015']
        }
      },
      { test: /\.scss$/, loader: ExtractTextPlugin.extract('css!sass') }
    ]
  },

  plugins: [
    new ExtractTextPlugin('public/style.css')
  ]
}

但是当我运行时,地图中webpack 只创建了 JS文件./public

    Asset    Size  Chunks             Chunk Names
bundle.js  844 kB       0  [emitted]  main
    + 222 hidden modules

在示例/教程之后,它仅针对 CSS 文件,或者在未实现 ExtractText 等明显错误的情况下。我也下载了包sass-loader node-sass。在某些示例中,我确实找到了包含的那些包,而在某些示例中却没有。

编辑(需要 index.js 中的样式):

import React from 'react'
import { render } from 'react-dom'
import { Router, browserHistory } from 'react-router'

import routes from './modules/routes'

require('./public/style.css')

render(
    <Router routes={routes} history={browserHistory} />,
    document.getElementById('app')
)

编辑(webpack.config.js):

  module: {
    loaders: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
        query: {
          presets: ['react', 'es2015']
        }
      },
      {
        test      : /\.scss$/,
        include   : path.join(__dirname, './public/sass'),
        loaders   : ["style", "css", "sass"]
      },
      {
        test: /\.scss$/,
        loader: ExtractTextPlugin.extract('css!sass')
      }
    ]
  },

  sassLoader: {
    includePaths: [path.join(__dirname, './public/sass')]
  },

  plugins: [
    new ExtractTextPlugin(path.join(__dirname, './public/style.css'))
  ]

我的文件夹结构如下所示:

webpack.config.js
index.js

/public
    index.html
    bundle.js (generated)

    /sass
        style.scss
        basics.scss (imported in style.scss)
4

2 回答 2

3

确保您需要您的样式文件。例如

require('../sass/app.scss');

我认为你也需要样式加载器,例如

{
        test      : /\.scss$/,
        include   : path.join(__dirname, 'sass'),
        loaders   : ["style", "css", "sass"]
}

这三个加载器执行以下操作

  1. 使用sass 加载器scss文件转换为普通文件CSS
  2. CSS loaderimports的帮助下解决所有问题url(...)sCSS
  3. 使用样式加载器将这些样式插入页面
于 2016-03-14T22:17:09.950 回答
0

您需要 ExtractTextPlugin 和样式加载器的组合。

module: {
  loaders: [
      { 
        test: /\.scss$/,
        loader: ExtractTextPlugin.extract('style-loader', 'css-loader!sass-loader'),
      },
  ],
}

...

plugins: [
  new ExtractTextPlugin(path.join(__dirname, 'public', 'style.css')), 
],

在我的工作配置中,我在解析中也有一个可能无关的条目:

resolve: {
  loaders: [
    {
      test: /\.(css|scss)$/,
      loader: ExtractTextPlugin.extract('style-loader', 'css-loader'),
    },
  ],
},

另一个错误可能是您如何将其包含在index.js. 您正在使用 require('./public/style.css')而不是require('./public/style.scss').

于 2016-03-15T16:22:45.880 回答