如何用webpack4.0撸单页/多页脚手架 (jquery, react,(5)

这样,webpack配置的title就可以动态的添加到html页面中了,这里我要说一下在new HtmlWebpackPlugin中我们添加了chunks数组,这个数组就是我们要打包进页面的js,main和about分别代表入口的名字,vender就是我们定义optimization时里面cacheGroups属性值中vendors中定义的name,当代码超过30000b时就会生成vender.js文件。 此时我们执行npm run build,打包结束后将会生成2个html页面,对应的文件依赖也会引入,在浏览器中打开,亲测有效~

如何用webpack4.0撸单页/多页脚手架 (jquery, react,

这样,一个基本的多页面打包工具就开发完成了,不过还有几点优化:

代码压缩,

第三方模块懒编译,我们可以使用webpack提供的dll技术做优化

pwa技术引入 下面分别是相关实现: 1.代码压缩,我们使用terser-webpack-plugin压缩js,用optimize-css-assets-webpack-plugin压缩css

npm install terser-webpack-plugin optimize-css-assets-webpack-plugin -D

我们在webpack.prod.js中添加一下配置:

// 导入模块 // 压缩css const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); // 压缩js const TerserPlugin = require('terser-webpack-plugin'); // 配置module.exports,添加配置如下 optimization: { minimizer: [ new TerserPlugin({ // 压缩js代码 cache: true, // 启用文件缓存 parallel: true, // 使用多进程并行执行任务来提高构建效率 sourceMap: true, // 将错误消息位置映射到模块 terserOptions: { drop_console: true, // 打包时剔除所有console.log drop_debugger: true // 打包时剔除所有debugger } }), new OptimizeCSSAssetsPlugin({})] // 压缩css代码 },

pwa:渐进式网络应用程序(progressive web application - PWA),是一种可以提供类似于native app(原生应用程序) 体验的 web app(网络应用程序)。首先我们安装依赖:

npm install workbox-webpack-plugin --save-dev

在需要做pwa的页面里加入如下脚本启动:

if ('serviceWorker' in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register('/service-worker.js').then(registration => { console.log('SW registered: ', registration); }).catch(registrationError => { console.log('SW registration failed: ', registrationError); }); }); }

dll文件优化打包速度 关于dll问题,我们可以在官网上查询具体的使用方法,这里就不具体说明了。

至此,我们关于开发基于ES6+JQuery+Less/Scss的单页/多页脚手架就告于段落了,下面我们来集成对react/vue/typescript的支持。

1.支持react

我们首先安装一个babel模块:

npm install --save-dev @babel/preset-react

然后在.babelrc中加入如下配置:

{ "presets": [ [ "@babel/preset-react", { "pragma": "dom", // default pragma is React.createElement "pragmaFrag": "DomFrag", // default is React.Fragment "throwIfNamespace": false // defaults to true } ] ] }

然后在index.js中写入一段react代码:

import React, {Component} from 'react' import ReactDOM from 'react-dom' class App extends Component { render() { return <div>react frame content.</div> } } ReactDOM.render(<App />, document.getElementById('root'));

打包后即可在浏览器中看到效果。

2.支持vue

首先先安装对应npm包:

npm install -D vue-loader vue-template-compiler

之后在webpack的配置文件中写入如下代码:

// webpack.base.js const VueLoaderPlugin = require('vue-loader/lib/plugin') module.exports = { module: { rules: [ // ... other rules { test: /\.vue$/, loader: 'vue-loader' } ] }, plugins: [ // make sure to include the plugin! new VueLoaderPlugin() ] }

如果要想解析.vue文件中的style,我们需要使用vue-style-loader模块,安装之后将其添加到loder中即可。 接下来我们写个简单的vue试一下吧:

<template> <div> {{ msg }} <img src="https://www.jb51.net/~/images/logo.png" /> <img :src="imgSrc" /> </div> </template> <script> import Logo from 'images/logo.png'; import 'css/common.css'; export default { data () { return { msg: 'Hello world!单独的', imgSrc: Logo } } } </script> <style lang="less"> .example { color: red; img { border: 2px solid #000; } } </style>

运行dev在浏览器中即可看到效果。 值得注意的是vue文件中引入资源的问题,使用相对路径会有问题,这里我们可以使用~/images/logo.png的方式或者require的方式来引入图片。

3.支持typescript

这里我们使用awesome-typescript-loader来编译typescript文件,也是官方推荐的一个加载器:

npm install awesome-typescript-loader --save-dev

然后我们在webpack的配置文件base中,在module的rules里加入如下代码:

{ test: /\.tsx?$/, loader: 'awesome-typescript-loader' }

最后一步,添加tsconfig.json文件:

{ "compilerOptions": { "noImplicitAny": true, "removeComments": true }, "awesomeTypescriptLoaderOptions": { /* ... */ } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/aedbf55d02c511c861c02c974d1b9f4b.html