使用webpack時,在main.js
文件中直接使用以下代碼導入了style.css
文件,控制檯中顯示以下錯誤:You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file.
css
import './css/style.css';
複製代碼
緣由是,webpack中默認只能打包.js
類型文件,沒法打包其餘類型文件。若是要打包非.js
類型文件,須要手動安裝一些第三方loader加載器。 如下爲各類文件類型打包實例:node
style-loader
和css-loader
兩個包npm install style-loader css-loader --save--dev
複製代碼
import './css/style.css';
代碼改成如下代碼:import 'style-loader!css-loader!./style.css'")'; //先通過css-loader和style-loader處理 複製代碼
npm run dev
複製代碼
這種方式的缺點是,當須要引入多個css文件,每次引入時都須要加style-loader!css-loader!
,比較麻煩,所以推薦使用如下方式:webpack
style-loader
和css-loader
兩個包npm install style-loader css-loader --save--dev
複製代碼
webpack.config.js
文件,在裏面新增一個配置節點module
,在module對象中,有一個rules
屬性,它是一個數組,裏面存放了全部第三方文件匹配和處理規則。以下代碼匹配處理css文件:module: { // 配置全部第三方loader 模塊
rules: [ // 第三方模塊的匹配規則
{ test: /\.css$/, use: ['style-loader', 'css-loader'] }, // 處理 CSS 文件的 loader
]
}
複製代碼
注意:此處'style-loader'
和'css-loader'
順序不可替換。由於use中處理順序爲從後往前。先用css-loader對css文件進行處理,將處理後的結果交給style-loader做進一步處理,處理爲webpack能夠進行打包的數據。web
import './css/style.css';
複製代碼
npm run dev
複製代碼
如下全部其餘類型文件的打包同方式二npm
style-loader
和css-loader
和less-loader
和less
三個包(若已有style-loader
和css-loader
則沒必要再安裝這兩個)npm install style-loader css-loader less-loader less --save--dev
複製代碼
webpack.config.js
文件,在節點module
中rules
屬性數組中,新增以下less的規則:{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] } // 處理 less 文件的 loader
複製代碼
import './css/style.less';
複製代碼
npm run dev
複製代碼
style-loader
和css-loader
和sass-loader
和node-sass
四個包(若已有style-loader
和css-loader
則沒必要再安裝這兩個)npm install style-loader css-loader sass-loader node-sass --save--dev
複製代碼
webpack.config.js
文件,在節點module
中rules
屬性數組中,新增以下scss的規則:{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] } // 處理 less 文件的 loader
複製代碼
import './css/style.lcss';
複製代碼
npm run dev
複製代碼
例如,在css樣式中使用background-image:url('...')
,webpack默認沒法處理url,所以也須要手動安裝第三方loader數組
url-loader
和file-loader
兩個包npm install url-loader file-loader --save--dev
複製代碼
webpack.config.js
文件,在節點module
中rules
屬性數組中,新增以下的規則:{ test: /\.(jpg|png|gif|bmp|jpeg)$/, use: 'url-loader' }, // 處理 圖片路徑的 loader
{ test: /\.(ttf|eot|svg|woff|woff2)$/, use: 'url-loader' }, // 處理 字體文件的 loader
複製代碼
npm run dev
複製代碼
webpack默認只能處理一部分的ES6語法,對於一些更高級的ES6語法,webpack沒法處理,以下代碼用webpack打包會報錯。sass
class Person {
static info = {name:'zlx',age:18}
};
console.log(Person.info);
複製代碼
webpack須要藉助於第三方的 loader,這裏使用Babel,將高級的ES6語法轉爲低級的語法以後,再將結果進行打包。bash
npm i babel-core babel-loader babel-plugin-transform-runtime -D
npm i babel-preset-env babel-preset-stage-0 -D
複製代碼
webpack.config.js
文件,在節點module
中rules
屬性數組中,新增以下的規則:{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }, // exclude是防止node_modules中的js文件被打包
複製代碼
{
"presets": ["env", "stage-0"],
"plugins": ["transform-runtime"]
}
複製代碼