bootstrap importing precompiled scss

 

我知道可以利用 npm 來安裝 Bootstrap 所需的相關套件,

不過,這次我只想利用 webpack 來幫我對 bootstrap 的 scss 檔作自動轉譯成 css 並附加在網頁上。

 

首先把 bootstrap Source files 下載下來,我們只取 scss 資料夾裡面的內容就好

 

準備的資料結構如下

 

index.html 內容如下

<!doctype html>
<html lang="en">

<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <script src="main.js"></script>
    <title>Hello, world!</title>
</head>

<body>
    <h1>Hello, world!</h1>

    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
        crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"
        crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy"
        crossorigin="anonymous"></script>
</body>

</html>

 

index.js 內容如下

const bootstrap = require("../src/scss/bootstrap.scss");

 

webpack.config.js 內容如下

const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'main.js',
        path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [
            {
                test: /\.scss$/,
                use: [
                    {
                        loader: 'style-loader'
                    },
                    {
                        loader: 'css-loader',
                        options: {
                            url: false,
                            // sourceMap: true
                        }
                    },
                    {
                        loader: 'postcss-loader', // Run post css actions
                        options: {
                            plugins: function () { // post css plugins, can be exported to postcss.config.js
                                return [
                                    require('precss'),
                                    require('autoprefixer')
                                ];
                            }
                        }
                    },
                    { loader: "sass-loader" }
                ]
            }
        ]
    },
};

 

按照 Bootstrap 網官指示,用到的 loader 有 style-loader、css-loader、postcss-loader(註1)、sass-loader,

而 postcss-loader 裡,還會用到 precss(註2)、Autoprefixer(註3) 套件。

 

(註1)、postcss-loader 底下可掛載好幾個套件,所以他算是一個套件集合體。

(註2)、precss是一個預處理CSS的插件包,集成了很多postcss插件的功能,比如嵌套,變量,繼承,混合,循環,判斷,

可以像使用Stylus,Sass或LESS一樣使用PreCSS。

(註3)、Autoprefixer 是對 css 檔額外加上 vendor prefixes,用來增加對瀏覽器版本的支援數。

 

接下來打入 npx webpack 指令嘗試編譯看看

發現 webpack.config.js 會使用到的 style-loader 還沒有安裝,所以就來裝上他吧,指令為

$ npm i style-loader --save-dev

再編譯一次,此時出 css-loader 還沒有安裝,所以請安裝

$ npm i css-loader --save-dev

 

再編譯一次,此時出 postcss-loader 還沒有安裝,所以請安裝

$ npm i postcss-loader --save-dev

再編譯一次,此時出 sass-loader 還沒有安裝,所以請安裝

$ npm i sass-loader --save-dev

再編譯一次,此時出 sass-loader 還沒有安裝,所以請安裝

$ npm i sass-loader --save-dev

 

再編譯一次,此時出 node-sass 還沒有安裝,所以請安裝

$ npm i node-sass --save-dev

 

再編譯一次,此時出 precss 還沒有安裝,所以請安裝

$ npm i precss --save-dev

 

再編譯一次,此時出 autoprefixer 還沒有安裝,所以請安裝

$ npm i autoprefixer --save-dev

 

國父革命第十次才成功,我比他幸運,我編譯到第九次就成功了。

 

參考資料:

Learn how to include Bootstrap in your project using Webpack 3.

Download Bootstrap to get the compiled CSS and JavaScript, source code, or include it with your favorite package managers like npm, RubyGems, and more.