2017-03-16 71 views
6

這裏是我的文件夾結構:如何將CSS文件從源文件夾打包並複製到dist文件夾?

enter image description here

我要來縮小和捆綁我src/css文件夾,並將其輸出作爲內部dist一個CSS文件中的CSS文件。到目前爲止,我所見過的所有例子都推薦require -ing在JS文件中的CSS文件。我不要那個。有沒有一種方法可以在webpack.config.js中配置以簡化和複製這些文件?

回答

2

得到它的工作。

安裝DEV-依賴條件

npm i extract-text-webpack-plugin --save-dev 
npm i css-loader --save-dev 

webpack.config.js

const webpack = require('webpack'); 
const ExtractTextPlugin = require('extract-text-webpack-plugin') 
const extractCSS = new ExtractTextPlugin('bundle.min.css') 

module.exports = { 
    entry: { 
    'bundle.min.css': [ 
     __dirname + '/src/styles/abc.css', 
     __dirname + '/src/styles/xyz.css', 
     __dirname + '/src/styles/mno.css' 
    ] 
    }, 
    devtool: '', 
    output: { 
    path: __dirname + '/dist/styles/', 
    filename: '[name]' 

    }, 
    module: { 
    rules: [{ 
     test: /\.css$/i, 
     use: extractCSS.extract({ 
      use: { 
      loader: 'css-loader', 
      options: { 
       minimize: true 
      } 
      } 
     }) 
    }] 
    }, 
    resolve: { 
    alias: {}, 
    modules: [], 
    extensions: ['.css'] 
    }, 
    plugins: [ 
    extractCSS 
    ] 
}; 

bundle.min.css將得到產生。根據minimize: true/false,縮小將決定。請享用!

+0

是否需要指定條目中的所有css文件? – Bonomi

+0

是的,因爲一個CSS文件不會包含另一個。所以人們必須手動編寫它。在JS文件的情況下,需要一個入口點,並且所有其他導入的js文件都會自動捆綁。可視化導入語句的圖形,你就會明白。 – softvar

0

它將分三步走;

首先你需要兩個裝載機和插件;分別命名爲css-loaderstyle-loaderextract-text-webpack-plugin

那麼你的配置可能類似於如下:

const webpack = require('webpack'); 
const ExtractTextPlugin = require("extract-text-webpack-plugin"); 
const path = require('path'); 
module.exports = { 
    entry: { 
    app: './src/index.js' 
    }, 
    output: { 
    path: 'dist', 
    filename: 'js/[name]-bundle.js' 
    }, 
    devtool: "cheap-source-map", 
    resolveLoader: { 
    modules: [ 
     'node_modules', 
     path.join(__dirname, '../node_modules'), 
    ] 
    }, 
    module: { 
    loaders: [ 
     { 
     test: /.css?$/, 
     loader: ExtractTextPlugin.extract({ fallback: 'style-loader', use: 'css-loader' }), 
     exclude: /node_modules/ 
     } 
    ] 
    }, 
    plugins: [ 
    new ExtractTextPlugin("css/[name].css"), 
    new webpack.optimize.UglifyJsPlugin({ 
     compress: { 
     warnings: false, 
     screw_ie8: true, 
     conditionals: true, 
     unused: true, 
     comparisons: true, 
     sequences: true, 
     dead_code: true, 
     evaluate: true, 
     join_vars: true, 
     if_return: true 
     }, 
     output: { 
     comments: false 
     } 
    }), 
    ] 
} 

,然後在入口文件,要求他們像require('./style.css');

請記住,這將遵循的路徑作爲源。

如果你要在你的css中加載字體文件和圖片,你可能還需要file-loader插件,它將複製目錄中的所有資源。

文件加載器的配置將是這樣的:

{ 
    test: /.png?$/, 
    loader: 'file-loader?name=img/[name].[ext]', 
    exclude: /node_modules/ 
} 

UgligyJsPlugin也會再縮小CSS。

+0

有沒有辦法做到這一點,而不需要從JS文件中提取CSS?這感覺很奇怪。 – Saravana

+0

CSS不會被添加到JS文件中,它只是一個需求,這意味着JS應用程序依賴於CSS文件。這個配置是我的一個應用程序的直接形式。 – Pankaj

相關問題