2017-09-19 3 views
0

webpack 및 SASS를 사용하여 반응 및 부트 스트랩을 사용하여 사용자 정의 응용 프로그램을 작성하기 위해 노력하고 있습니다. 내 반응 구성 요소 내부의 기본 부트 스트랩 스타일 중 일부를 무시하려고 시도한다는 것을 제외하고는 모든 것을 올바르게 후크 할 수 있었지만 작동하지 않는 것 같습니다. 여기 반응 부팅 스트랩 CSS를 사용자 정의 SASS로 대체하십시오.

내 파일 구조입니다

webpack.config.js 
app/ 
--index.html 
--main.scss 
--renderer.js 
--components/ 
----navigation/ 
------index.js 

webpack.config.js

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

const myConfig = { 
    entry: [ 
     path.resolve('./app/renderer.js'), 
     'webpack-hot-middleware/client?reload=true&path=http://localhost:5555/__webpack_hmr', 
     'webpack/hot/only-dev-server', 
    ], 

    devtool: 'inline-source-map', 
    target: 'web', 

    module: { 
     loaders: [ 
      { 
       test: /\.scss$/, 
       exclude: /node_modules/, 
       loaders: 'style-loader!css-loader!sass-loader?sourceMap', 
      }, 
     ], 
     rules: [ 
      { 
       test: /\.jsx?$/, 
       exclude: /node_modules/, 
       use: { 
        loader: 'babel-loader', 
        options: { 
         cacheDirectory: true, 
         plugins: [ 
          'transform-class-properties', 
          'transform-decorators-legacy', 
          'transform-es2015-classes', 
          'react-hot-loader/babel' 
         ], 
        }, 
       }, 
      }, 
      { 
       test: /.scss$/, 
       use: [ 
        { 
         loader: 'style-loader' 
        }, 
        { 
         loader: 'css-loader', 
         options: { 
          modules: true, 
          sourceMap: true, 
          importLoaders: 1, 
          localIdentName: '[name]__[local]__[hash:base64:5]', 
         } 
        }, 
        { 
         loader: 'sass-loader' 
        } 
       ] 
      }, 
     ], 
    }, 

    plugins: [ 
     new webpack.optimize.OccurrenceOrderPlugin(), 
     new webpack.HotModuleReplacementPlugin(), 
     new webpack.NoEmitOnErrorsPlugin(), 
    ], 

    output: { 
     path: path.join(__dirname, './app/static'), 
     filename: 'bundled.js', 
     publicPath: 'http://localhost:5555/static/', 
    }, 
} 

module.exports = [ myConfig ] 

index.html을

<html> 
    <head> 
     <!-- Latest compiled and minified CSS --> 
     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/latest/css/bootstrap.min.css"> 
    </head> 
    <body> 
     <div id='root'></div> 
     <script src="http://localhost:5555/static/bundled.js"></script> 
    </body> 
</html> 

renderer.js

import React from 'react' 
import ReactDOM from 'react-dom' 

import './main.scss' 

import Navigation from './components/navigation' 

ReactDOM.render(
    <Navigation />, 
    document.getElementById('root') 
) 
main.scss에서

탐색 /하는 index.js

import React from 'react' 
import { Navbar } from 'react-bootstrap' 

export default class Navigation extends React.Component { 
    clickHandler =() => { 
     console.log("Hello World") 
    } 

    render() { 
     return (
      <Navbar id="navigationRoot" inverse staticTop> 
       <Navbar.Header> 
        <Navbar.Brand> 
         <a onClick={this.clickHandler}>SiteName</a> 
        </Navbar.Brand> 
       </Navbar.Header> 
      </Navbar> 
     ) 
    } 
} 

main.scss

.navbar-brand { 
    color: #FF0000; 
} 

은 내가 SASS 파일에서 예를 들어 부트 스트랩 네비게이션 바 브랜드 스타일의 색상을 대체 할 시도 그러나 bootstrap.min.css 파일에서 스타일을 무시할 수없는 것으로 보입니다. main.scss 파일을 렌더러 빌드에 포함시키는 이유는 main.scss에이 내용을 추가 할 수 있고 스타일이 웹 페이지에서 선택되기 때문입니다. 파일 번들

body { 
    background-color: #FF0000; 
} 

here

이다 내가 그 main.scss 파일에 의해 오버라이드 (override) 할 수없는 스타일을 야기 말이냐?

+0

당신의 bundled.js 무엇 생겼를? main.scss는 컴파일되고 html에 포함되어 있습니까? bundled.js에 포함되어 있습니까? – miir

+0

나는 [bundled file]의 9546 번 라인에서이 파일을 볼 수 있다고 생각한다 (https://gist.github.com/didomenicom/b41fb7225cbc81c35d7607981268a426#file-gistfile1-txt-L9546). 유일한 포함은 renderer.js에 있습니다. webpack 설정을 추가했습니다. – mightymouse3062

답변

0

문제는 css-loader의 webpack 구성 옵션에 있습니다. localIdentName에 대한 옵션을 사용하고 있습니다.이 옵션은 기존 클래스를 덮어 쓰지 않도록 로컬 클래스 이름을 생성합니다. 그러나, 당신의 목표 기존 부트 스트랩 클래스 및 사용자 클래스 이름의 현지화를 덮어입니다 것은 당신을 방해한다 : localIdentName: '[name]__[local]__[hash:base64:5]'

webpack.config.js을 (부분보기) : 또한

 { 
      test: /.scss$/, 
      use: [ 
       { 
        loader: 'style-loader' 
       }, 
       { 
        loader: 'css-loader', 
        options: { 
         modules: true, 
         sourceMap: true, 
         importLoaders: 1 
        } 
       }, 
       { 
        loader: 'sass-loader' 
       } 
      ] 
     }, 

, 부트 스트랩이 당신보다 높은 특이성이있는 .navbar-inverse .navbar-brand의 CSS 규칙을 적용하여 CSS가 적용되지 않는 것으로 보입니다. 당신이 당신의 main.scss에서 같은 선택기를 사용하는 경우, 당신의 스타일이 우선 부트 스트랩의 스타일을 덮어 쓰게됩니다 :

main.scss

.navbar-inverse .navbar-brand { 
    color: #FF0000; 
} 
+0

흥미롭게도 이것은 작동하지 않았습니다. ( entry.scss 파일을 만들고 대체 방법과 같은 내용을 포함하는 예제를 사용하면 여전히 작동하지 않습니다. 가져 오기 줄 및 파일에 .navbar- 브랜드가있는 경우에도 여전히 나타나지 않습니다. 내가보고 있어야하는 위치에 대한 생각은 무엇입니까? – mightymouse3062

+0

@ mightymouse3062 컴파일 중 중단되었거나 CSS 규칙이 예상대로 작동하지 않았습니까? – miir

+0

@ mightymouse3062 문제를 해결하기 위해 코드를 로컬에서 실행해야했습니다. – miir