详解webpack + ES6 + Sass搭建多页面应用

  

webpack同之前的大口相比,吞咽属于非模块化打包工具,webpack属于模块化打包工具,两者的优劣这里不做过多分析(可自行百度)。

  

目的:是为了分享一下使用过程中,用到的插件,装载机,遇到的各种问题以及解决办法,最后会附上最终代码。

  

在这个项目中,用webpack打包css, scss, js,图片文件,jquery,第三方插件,字体图标,编译es6,压缩html,压缩js,压缩css,基本涵盖了常用的东西。

  

代码结构如下

  

详解webpack + ES6 + Sass搭建多页面应用“> </p>
  <p>下面单独说几个难点</p>
  <p> 1,打包多页面,使用到的插件是html-wepack-plugin, html-loader,也就是你有多少个页面,就有多少个入口,也就写多少个模版文件。当然,页面过多时,可以考虑遍历处理。</p>
  
  <pre类=//引入路径插件   const path=要求(“路径”);//引入导html插出件   const HtmlWebpackPlugin=要求(“html-webpack-plugin”);      常量配置={//入口   条目:{   家:“。/页面/lawSearchHomepage.js ',   列表:“/页面/lawSearchList.js。”   },//出口   输出:{   文件名:“[名字].bundle.js”,   路径:path.resolve (__dirname“构建”)   },//插件   插件:[//html单独导出插件——首页   新HtmlWebpackPlugin ({   文件名:“lawSearchHomepage.html ',//输出后的文件名称   模板:“。/页面/lawSearchHomepage.html ',//模版页面路径   标识:“。/页面/图片/ico的位于,//页签图标   块:['家']//需要引入的js文件名称   注射:没错,   散列:真的,//哈希值   使变小:{//压缩   removeComments:没错,   collapseWhitespace:真   }   }),//html单独导出插件——列表页   新HtmlWebpackPlugin ({   文件名:“lawSearchList.html”,   模板:“。/页面/lawSearchList.html ',   标识:“。/页面/图片/ico的位于,   块:“列表”,   注射:没错,   散列:没错,   使变小:{   removeComments:没错,   collapseWhitespace:真   }   })   ]   }   模块。出口=配置;      

2,单独打包css,使用到的插件extract-text-webpack-plugin,装载机有style-loader, css-loader, sass-loader, node-sass,因为每个页面要引入相对应的css文件,所以,在js入口文件里通过要求(“。/lawSearchHomepage.scss”)引如对应的scss文件,打包后css文件会单独打包,并通过链接的形式引入html

     //引入导出css插件   const ExtractTextPlugin=要求(“extract-text-webpack-plugin”);//加载程序   {//CSS   测试:\ . css/,   用途:ExtractTextPlugin.extract ({   使用(“css-loader”):   })   },   {//萨斯   测试:\ .scss/,   用途:ExtractTextPlugin.extract ({   回退:“style-loader”,   使用:[' css-loader ', ' sass-loader ']   }),   }//插件//将css单独打包插件   新ExtractTextPlugin ({   文件名:“[名字]. css”,//制定编译后的文件名称   allChunks:真的,//把分割的块分别打包   }),      

3处理es6,安装巴别塔,babel-loader@7(因为下面压缩js,其他版本报错),babel-core, babel-preset-es2015(也是为了解决压缩js报错)

     //加载程序   {//ES6   测试:/\ . js/美元,   装载机:“babel-loader”,//排除:__dirname + ' node_modules ',//不对这个进行巴别塔转换,这里边已经打包好,这样能减少打包时间//包括:__dirname +“src”这里的src是你要编译的js文件的目录,   排除:path.resolve (__dirname node_modules),   包括:path.resolve (__dirname“页”),   查询:{//若在package.json中定义了这个预设,则这边可以删掉   预设(“es2015”):   }   },      

4处理jquery,安装expose-loader

  

第一种方法可以通过在js里要求(“jquery expose-loader& # 63;美元!”);引入jquery

  

第二种通过装载机

     //加载程序   {//Jquery   测试:require.resolve (“jquery”),   用途:[{   装载机:“expose-loader”,   选择:“jQuery”   },{   装载机:“expose-loader”,   选择:“美元”   })   },      

5,压缩css,使用插件optimize-css-assets-webpack-plugin,安装cssnano

     //引入压缩css的插件   const optimizeCss=要求(“optimize-css-assets-webpack-plugin”);//引入cssnano插件   const cssnano=要求(“cssnano”);//插件   插件:[   新optimizeCss ({   assetNameRegExp:/\ .style \ . css/g美元,   cssProcessor: cssnano,   cssProcessorOptions: {discardComments: {removeAll:   真正的}},   canPrint:真   }),   ),//压缩优化css,不写这个css还是没压缩,不知道为啥   优化:{//最小化:没错,   最小值:[新optimizeCss ({}))   },

详解webpack + ES6 + Sass搭建多页面应用