2017-12-17 41 views
0

私は、scss(mixins、variablesなど)とcssモジュールの組み合わせを使用するreactを使ってプロジェクトをセットアップしようとしています。Webpack scss&css modules react - 予期しないトークン文字列

しかし、スタイルローダー、css-loader、postcss-loader、sass-loader、sass-resources-loader、import-glob-loaderを使用してwebpackをセットアップすると、私は、次のされたエラーを取得:

Worker error Error: Unexpected token string «./node_modules/css- 
loader/index.js?"importLoaders":1,"modules":true,"localIdentName" 
:"[name]__[local]___[hash:base64:5]"!./node_modules/postcss-loade 
r/lib/index.js?!./node_modules/sass-loader/lib/loader.js!./node_m 
odules/sass-resources-loader/lib/loader.js?"resources":["/Users/* 
***/Documents/Repos/project/src/scss/*.scss"]!./node_modules/impo 
rt-glob-loader/index.js!./src/App/App.scss», expected punc «,»  
    at objectToError (/Users/****/Documents/Repos/project/node_mo 
dules/workerpool/lib/WorkerHandler.js:63:14)      
    at ChildProcess.<anonymous> (/Users/****/Documents/Repos/ui- 
kit/node_modules/workerpool/lib/WorkerHandler.js:146:32)   
    at emitTwo (events.js:125:13)         
    at ChildProcess.emit (events.js:213:7)       
    at emit (internal/child_process.js:774:12)      
    at _combinedTickCallback (internal/process/next_tick.js:141:1 
1)                 
    at process._tickCallback (internal/process/next_tick.js:180:9 
) filename: '0', line: 18, col: 936, pos: 2292  

のWebPACK SCSS

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

const DashboardPlugin = require('webpack-dashboard/plugin'); 
const HtmlWebpackPlugin = require('html-webpack-plugin'); 
const autoprefixer = require('autoprefixer'); 

const nodeEnv = process.env.NODE_ENV || 'development'; 
const isProduction = nodeEnv === 'production'; 

const jsSrcPath = path.join(__dirname, './'); 
const publicPath = path.join(__dirname, './public'); 
const imgPath = path.join(__dirname, './src/assets/img'); 
const srcPath = path.join(__dirname, './src'); 

/* Common plugins */ 

const plugins = [ 
    new webpack.DefinePlugin({ 
     'process.env': { 
      NODE_ENV: JSON.stringify(nodeEnv) 
     } 
    }), 
    new webpack.NamedModulesPlugin(), 
    new HtmlWebpackPlugin({ 
     template: path.join(publicPath, 'index.html'), 
     path: publicPath, 
     filename: 'index.html', 
    }), 
    new webpack.NoEmitOnErrorsPlugin(), 
]; 

/* Common Rules */ 
const rules = [{ 
     test: /\.(js|jsx)$/, 
     include: path.join(__dirname, 'src'), 
     exclude: path.resolve(__dirname, "node_modules"), 
     loader: "babel-loader" 
    }, 
    { 
     test: /\.scss$/, 
     use: [ 
      'style-loader', 
      { 
       loader: 'css-loader', 
       options: { 
        importLoaders: 1, 
        modules: true, 
        localIdentName: "[name]__[local]___[hash:base64:5]" 
       } 
      }, 
      { 
       loader: 'postcss-loader', 
       options: { 
        plugins:() => [autoprefixer] 
       } 
      }, 
      'sass-loader', 
      { 
       loader: 'sass-resources-loader', 
       options: { 
        resources: [ 
         path.resolve(__dirname, "./src/scss/*.scss") 
        ] 
       } 
      }, 
      'import-glob-loader' 
     ] 
    }, 
    { 
     test: /\.woff$/, 
     loader: "url-loader?limit=10000&mimetype=application/font-woff&name=[path][name].[ext]" 
    }, { 
     test: /\.woff2$/, 
     loader: "url-loader?limit=10000&mimetype=application/font-woff2&name=[path][name].[ext]" 
    }, 
    { 
     test: /\.(png|gif|jpg|svg)$/, 
     include: imgPath, 
     use: 'url-loader?limit=20480&name=assets/[name]-[hash].[ext]', 
    } 
]; 

if (isProduction) { 
    // Production plugins 
    plugins.push(
     new webpack.LoaderOptionsPlugin({ 
      minimize: true, 
      debug: false, 
     }), 
     new webpack.optimize.UglifyJsPlugin({ 
      compress: { 
       warnings: false, 
       screw_ie8: true, 
       conditionals: true, 
       unused: true, 
       comparisons: true, 
       sequences: true, 
       dead_code: true, 
       evaluate: true, 
       if_return: true, 
       join_vars: true, 
      }, 
      output: { 
       comments: false, 
      }, 
     }), 
    ); 

    // Production rules 

} else { 
    // Development plugins 
    plugins.push(
     new webpack.HotModuleReplacementPlugin(), 
     new DashboardPlugin() 
    ); 
    // Development rules 

} 

module.exports = { 
    devtool: isProduction ? 'eval' : 'source-map', 
    context: jsSrcPath, 
    entry: [ 
     'babel-polyfill', 
     './src/index.js' 
    ], 
    output: { 
     path: publicPath, 
     publicPath: '/', 
     filename: 'app-[hash].js', 
    }, 
    module: { 
     rules, 
    }, 
    resolve: { 
     extensions: ['.webpack-loader.js', '.web-loader.js', '.loader.js', '.js', '.jsx'], 
     modules: [ 
      path.resolve(__dirname, "node_modules"), 
      jsSrcPath 
     ] 
    }, 
    plugins, 
    devServer: { 
     contentBase: isProduction ? './public' : './src', 
     historyApiFallback: true, 
     port: 3000, 
     compress: isProduction, 
     inline: !isProduction, 
     hot: !isProduction, 
     host: '0.0.0.0', 
     stats: { 
      assets: true, 
      children: false, 
      chunks: false, 
      hash: false, 
      modules: false, 
      publicPath: false, 
      timings: true, 
      version: false, 
      warnings: true, 
      colors: { 
       green: '\u001b[32m' 
      } 
     } 
    } 
}; 

が反応:

import React, { Component } from 'react' 
import PropTypes from 'prop-types' 
import { bindActionCreators } from 'redux' 
import { connect } from 'react-redux' 

import styles from './App.scss'; 

class App extends Component { 
    render() { 
    return (
     <div> 
     <h1 className={styles.main}>Hello World</h1> 
     </div> 
    ) 
    } 
} 

const mapStateToProps = (state) => { 
    return { 
     app: state.app 
    }; 
}; 

export default connect(mapStateToProps, null)(App) 

App.scssが

.main { color: red; } 

ファイル他の誰がこの問題を持っています前?

答えて

0

Full for reference

module: { 
    rules: [ 
     { 
      test: /\.js$/, 
      exclude: /node_modules/, 
      loader: 'babel-loader', 
     }, 

     { 
      test: /\.scss$/, 
      loader: ExtractPlugin.extract(['css-loader', 'sass-loader']), 
     }, 
     { 
      test: /\.css$/, 
      exclude: [/\.global\./, /node_modules/], 
      loader: ExtractPlugin.extract(
       { 
        fallback: 'style-loader', 
        use: [ 
         { 
          loader: 'css-loader', 
          options: { 
           importLoaders: 1, 
           modules: true, 
           autoprefixer: true, 
           minimize: true, 
           localIdentName: '[name]__[local]___[hash:base64:5]' 
          } 
         } 
        ] 
       }) 
     }, 
1

あなたのexclude: path.resolve(__dirname, "node_modules"),を非難しているように見えます。あなたはローダーからそれを取り除いてみることができますか?

さらに詳しい情報を提供してください:エラーはnode_modules/css-loader/index.jsについて報告しています。 Javaスクリプトファイル。 js|jsxルール(babel-loader)では、node_modulesは完全に除外されています。それが問題の原因です。

UPDATE:問題の原因コード、なぜこの作品

+0

{ test: /\.s?css$/, use: ExtractTextPlugin.extract({ fallback: 'style-loader', use: [ { loader: 'css-loader', options: { modules: true, importLoaders: 1, localIdentName: '[name]__[local]___[hash:base64:5]' } }, { loader: 'postcss-loader', options: { plugins:() => [autoprefixer] } }, 'sass-loader' ] }) } 

もプラグインにnew ExtractTextPlugin({ filename: '[name].css' }),を追加します。[/\.global\./、/ node_modules /]。私はwebpack設定のscss部分でnode_modulesを除外しようとしました。それでも同じエラーが発生する – themaster

+0

@themaster Yikes!私の悪い。問題のある除外事項や詳細を反映した回答を更新しました。 –

0

まだ100%ではわからないが、私はエキス-テキストプラグインを追加し、それは私の問題を修正しました。私は除外し使用していない

+0

あなたは道を見つけてうれしいです。質問がある場合は、更新された回答を確認してください。それが役に立てば幸い。 –

関連する問題