[js高手之路]深刻淺出webpack教程系列索引目錄:css
咱們接着上文,那麼在上篇文章的最後,寫到了css-loader的用法,若是你用心發現,就能看到我在style.css樣式文件中寫了一個這樣的樣式:html
1 module.exports = { 2 plugins : [ 3 require('autoprefixer')({ 4 browsers : ['last 5 versions'] 5 }) 6 ] 7 }
意思是在postcss-loader中引入autoprefixer插件node
修改webpack.config.js中css loader部分的配置:webpack
1 var htmlWebpackPlugin = require('html-webpack-plugin'); 2 let path = require('path'); 3 module.exports = { 4 entry: './src/main.js', 5 output: { 6 path: __dirname + '/dist', 7 filename: 'js/[name].bundle.js', 8 }, 9 plugins: [ 10 new htmlWebpackPlugin({ 11 filename: 'index.html', 12 template: 'index.html', 13 inject: true 14 }) 15 ], 16 module: { 17 rules: [ 18 { 19 test: /\.js$/, 20 exclude: /(node_modules)/, 21 include: [ 22 path.resolve(__dirname, "src"), 23 ], 24 use: { 25 loader: 'babel-loader', 26 options: { 27 presets: ['env'] 28 } 29 } 30 }, 31 { 32 test: /\.css$/, 33 exclude: /(node_modules)/, 34 use: [ 35 'style-loader', { 36 loader : 'css-loader', 37 options : { 38 importLoaders : 1 39 }, 40 }, 41 'postcss-loader' 42 ] 43 } 44 ] 45 } 46 }
執行webpack打包,生成以後的css文件,就自動補充css3前綴了:css3
2、安裝less-loader插件web
若是咱們在modal.js中直接引入modal.less,而後webpack打包,這樣會報錯npm
1 import './modal.less'; 2 let modal = function(){ 3 return { 4 'component-name' : 'modal' 5 } 6 } 7 export default modal;
報錯提示須要一個loader來處理, 咱們能夠安裝less-loader了:瀏覽器
安裝: npm install --save-dev less-loader less
bash
安裝完成以後,配置webpack.config.jsbabel
1 var htmlWebpackPlugin = require('html-webpack-plugin'); 2 let path = require('path'); 3 module.exports = { 4 entry: './src/main.js', 5 output: { 6 path: __dirname + '/dist', 7 filename: 'js/[name].bundle.js', 8 }, 9 plugins: [ 10 new htmlWebpackPlugin({ 11 filename: 'index.html', 12 template: 'index.html', 13 inject: true 14 }) 15 ], 16 module: { 17 rules: [ 18 { 19 test: /\.js$/, 20 exclude: /(node_modules)/, 21 include: [ 22 path.resolve(__dirname, "src"), 23 ], 24 use: { 25 loader: 'babel-loader', 26 options: { 27 presets: ['env'] 28 } 29 } 30 }, 31 { 32 test: /\.css$/, 33 exclude: /(node_modules)/, 34 use: [ 35 'style-loader', { 36 loader : 'css-loader', 37 options : { 38 importLoaders : 1 39 }, 40 }, 41 'postcss-loader' 42 ] 43 }, 44 { 45 test: /\.less$/, 46 use: [ 47 { 48 loader: "style-loader" 49 }, { 50 loader: "css-loader" 51 }, { 52 loader: "less-loader" 53 } 54 ] 55 } 56 ] 57 } 58 }
當碰到less文件時,交給less-loader處理,而後交給css-loader處理,最後交由style-loader處理,而後執行webpack打包,modal.less文件中樣式就被嵌入進來了
3、安裝html-loader
安裝命令: npm install html-loader --save-dev
modal.js文件引入modal.html
1 import './modal.less'; 2 import tpl from './modal.html'; 3 let modal = function(){ 4 return { 5 'component-name' : 'modal', 6 'tpl' : tpl 7 } 8 } 9 export default modal;
main.js對demo3目錄下的index.html文件插入模板(modal.html)
1 import modal from './components/modal.js'; 2 import './css/style.css'; 3 let App = function(){ 4 var oApp = document.querySelector("#app"); 5 var oModal = new modal(); 6 oApp.innerHTML = oModal.tpl; 7 } 8 new App();
demo3目錄下的index.html文件,須要添加個div, id爲app
webpack.config.js增長一項html-loader的配置
1 var htmlWebpackPlugin = require('html-webpack-plugin'); 2 let path = require('path'); 3 module.exports = { 4 entry: './src/main.js', 5 output: { 6 path: __dirname + '/dist', 7 filename: 'js/[name].bundle.js', 8 }, 9 plugins: [ 10 new htmlWebpackPlugin({ 11 filename: 'index.html', 12 template: 'index.html', 13 inject: true 14 }) 15 ], 16 module: { 17 rules: [ 18 { 19 test: /\.js$/, 20 exclude: /(node_modules)/, 21 include: [ 22 path.resolve(__dirname, "src"), 23 ], 24 use: { 25 loader: 'babel-loader', 26 options: { 27 presets: ['env'] 28 } 29 } 30 }, 31 { 32 test: /\.css$/, 33 exclude: /(node_modules)/, 34 use: [ 35 'style-loader', { 36 loader : 'css-loader', 37 options : { 38 importLoaders : 1 39 }, 40 }, 41 'postcss-loader' 42 ] 43 }, 44 { 45 test: /\.less$/, 46 use: [ 47 { 48 loader: "style-loader" 49 }, { 50 loader: "css-loader" 51 }, { 52 loader: "less-loader" 53 } 54 ] 55 }, 56 { 57 test: /\.(html)$/, 58 use: { 59 loader: 'html-loader', 60 } 61 } 62 ] 63 } 64 }
而後執行webpack打包命令,就能看到modal.html被插入到id爲app的div元素內了
4、修改模板後綴,爲模板賦值
安裝ejs-loader: npm install ejs-loader --save-dev
在components目錄下新建一個文件(modal.ejs):
1 <div class="modal"> 2 <div>這個組件的名字是:<%= name %></div> 3 <% for( var i = 0; i < arr.length; i++ ){ %> 4 <%= arr[i]%> 5 <% } %> 6 </div>
modal.js引入ejs模板
1 import './modal.less'; 2 // import tpl from './modal.html'; 3 import tpl from './modal.ejs'; 4 let modal = function(){ 5 return { 6 'component-name' : 'modal', 7 'tpl' : tpl 8 } 9 } 10 export default modal;
main.js爲ejs模板分配數據
1 import modal from './components/modal.js'; 2 import './css/style.css'; 3 let App = function(){ 4 var oApp = document.querySelector("#app"); 5 var oModal = new modal(); 6 // oApp.innerHTML = oModal.tpl; 7 oApp.innerHTML = oModal.tpl({ 8 name : 'ghostwu', 9 arr : [ 'ghostwu', '王朝', '馬漢' ], 10 }); 11 } 12 new App();
webpack.config.js添加ejs-loader的支持:
1 var htmlWebpackPlugin = require('html-webpack-plugin'); 2 let path = require('path'); 3 module.exports = { 4 entry: './src/main.js', 5 output: { 6 path: __dirname + '/dist', 7 filename: 'js/[name].bundle.js', 8 }, 9 plugins: [ 10 new htmlWebpackPlugin({ 11 filename: 'index.html', 12 template: 'index.html', 13 inject: true 14 }) 15 ], 16 module: { 17 rules: [ 18 { 19 test: /\.js$/, 20 exclude: /(node_modules)/, 21 include: [ 22 path.resolve(__dirname, "src"), 23 ], 24 use: { 25 loader: 'babel-loader', 26 options: { 27 presets: ['env'] 28 } 29 } 30 }, 31 { 32 test: /\.css$/, 33 exclude: /(node_modules)/, 34 use: [ 35 'style-loader', { 36 loader : 'css-loader', 37 options : { 38 importLoaders : 1 39 }, 40 }, 41 'postcss-loader' 42 ] 43 }, 44 { 45 test: /\.less$/, 46 use: [ 47 { 48 loader: "style-loader" 49 }, { 50 loader: "css-loader" 51 }, { 52 loader: "less-loader" 53 } 54 ] 55 }, 56 { 57 test: /\.(html)$/, 58 use: { 59 loader: 'html-loader', 60 } 61 }, 62 { 63 test: /\.(ejs)$/, 64 use: { 65 loader: 'ejs-loader', 66 } 67 } 68 ] 69 } 70 }
而後執行webpack打包命令,就能看見新的ejs模板中的數據被嵌入在id爲app的div中