2017-02-21 71 views
1

我剛剛開始了一個webpack的反應項目,我試圖編譯我的sass文件並使用webpack導出到css,但似乎沒有發生任何事情。我沒有收到任何錯誤,但我沒有看到任何.css文件的項目。任何建議都會很棒。使用webpack編譯sass並導出到css 2

我的WebPack配置如下:

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

module.exports = { 
    entry: './src/app.js', 
    output: { path: __dirname, filename:'./dist/bundle.js' }, 

    module: { 
     loaders: [{ 
      test: /.jsx?$/, 
      loader: 'babel-loader', 
      exclude: /node_modules/, 
      query: { presets: ['es2015', 'react'] } 
     },{ 
      rules: [{ 
       test: /\.scss$/, 
       use: [ 
        {loader: "style-loader"}, 
        {loader: "css-loader"}, 
        {loader: "sass-loader"} 
       ] 
      }] 
     }] 
    }, 
    plugins: [new ExtractTextPlugin('../src/css/main.css')] 
}; 

這裏是版本的/ dev依賴我使用:

"devDependencies": { 
    "babel-core": "^6.23.1", 
    "babel-loader": "^6.3.2", 
    "babel-preset-es2015": "^6.22.0", 
    "babel-preset-react": "^6.23.0", 
    "css-loader": "^0.26.1", 
    "extract-text-webpack-plugin": "^2.0.0-rc.3", 
    "react": "^15.4.2", 
    "react-dom": "^15.4.2", 
    "rimraf": "^2.6.0", 
    "sass-loader": "^6.0.1", 
    "style-loader": "^0.13.1", 
    "webpack": "^2.2.1", 
    "webpack-dev-server": "^2.4.1" 
} 

提前感謝! :)

+1

我看到你正在使用CSS的ExtractTextPlugin,但不是scss。您是否還將scss文件導入到.js文件中? –

+0

您是否已將任何'.scss'文件導入您的條目文件或其任何導入的文件? –

+0

謝謝你們,我沒有輸入文件。當我作爲SCSS導入並且cix爲SCSS提取時它可以工作 - 這是個好消息,但現在我的問題是我想編寫SASS,當我將ExtractText更改爲sass並導入時出現錯誤「您可能需要適當的加載器來處理這種文件類型。「 – ironmike

回答

0

從插件文檔(https://github.com/webpack-contrib/extract-text-webpack-plugin):

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

module.exports = { 
    module: { 
    rules: [ 
     { 
     test: /\.css$/, 
     use: ExtractTextPlugin.extract({ 
      fallback: "style-loader", 
      use: "css-loader" 
     }) 
     } 
    ] 
    }, 
    plugins: [ 
    new ExtractTextPlugin("styles.css"), 
    ] 
} 

所以兩件事情似乎丟失。首先是你沒有在規則中添加插件,其次是你沒有提到你是否在你的入口文件或其任何導入文件中導入任何.scss文件。

一旦你做了這兩件事,你應該走上正軌。

0

在你的WebPack配置文件試試這個:

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

const extractSass = new ExtractTextPlugin({ 
    filename: "app.css" 
}); 

module.exports = { 
    entry: [ 
     './src.app.js' 
    ], 
    output: { path: __dirname, filename:'./dist/bundle.js' }, 
    plugins: [ 
     extractSass 
    ], 
    module: { 
     loaders: [{ 
     test: /.jsx?$/, 
     loader: 'babel-loader', 
     exclude: /node_modules/, 
     query: { presets: ['es2015', 'react'] } 
     },{ 
     rules: [{ 
      test: /\.scss$/, 
      loader: extractSass.extract({ 
       loader: [{ 
        loader: "css-loader" 
       }, { 
        loader: "sass-loader" 
       }] 
      }) 
     }] 
    } 
} 

CSS文件將被命名爲app.css - 隨意使用任何其他名稱。

然後在您的src/app.js文件中,您需要導入scss文件。沒有這個部分,Webpack將不會包含它。

import React from 'react'; 
import {render} from 'react-dom'; 

import 'app.scss'; // or other file which is your main scss file 


render(<MyComponent />, document.getElementById('appContainer')); 
+0

當我在應用程序中配置Webpack時,我一直在爲路徑苦苦掙扎。請記住,您在scss文件中使用的所有路徑都與主scss文件相關。 – bognix

+0

非常感謝!我可以通過使用SCSS文件擴展名來實現它,但是我一直在使用SASS,當我嘗試運行webpack時,我得到「您可能需要一個合適的加載程序來處理這種文件類型。」 - 我認爲sass loader會覆蓋這個? – ironmike