【Vue五分钟】五分钟了解webpack实战配置案例详情

简介: 接下来讲怎么打包类库文件 library(里面有几个 JS 文件, index.js 将这些文件里面的方法导出给其它引入这个库的文 件使用),当然了这个肯定不能直接被使用,还是需要安装 配置 webpack 什么的。

1.library打包

接下来讲怎么打包类库文件 library(里面有几个 JS 文件, index.js 将这些文件里面的方法导出给其它引入这个库的文 件使用),当然了这个肯定不能直接被使用,还是需要安装 配置 webpack 什么的。

const path = require( 'path');
module.exports = {
mode: 'production',
entry: './src/index.js',output: {
path: path. resolve(_dirname, 'dist'),filename: 'library.js '
}
}

正常来说业务代码这样子就可以了,但是毕竟是类库,要给 别人使用,可能以各种方式引入这个类库(import、require 什么的)。

import library from 'library'
const library = require( 'library ' );require(['library'], function(){})

所以我们再加一个指定 umd,就是不管以什么方式都可以引用;

libraryTarget:'umd'

有可能我们是以 script 标签、全局变量使用,就需要我们打包挂载到全局变量 library(随意命名)上。其实一般这两个属性就足够了,但是两个是有联系的,比如 umd 改成 this 则变量是挂载在 this 上,只不过我们全局引入 所以还是全局变量。umd 还可以改成 window、global 什么的。 考虑另一种情况,如果我们类库文件引入了其它类库 (lodash),而引入我们库的用户可能也引入了相同的类库 (lodash),导致存在两份相同的类库代码(lodash),我们就 可以↓忽略这个库,不打包这个库,只不过用户就需要自己 引入 lodash 了。

externals:["ladash"],

当然也可以写成对象的形式,用来指定不同引入方式(一般 不用),比如 root 就是说以 script 标签方式引入然后注册一 个_全局变量,commonjs 就是说以 require 形式引入且 lodash 命名必须为 lodash.

externals: {
lodash:
root:
commonjs: 'lodash'}
},

这边并没有涉及到 tree shaking、按需加载什么的,较基础。 如果想要别人使用这个插件则先指定好 main 入口文件为打包后 dist 目录下的 index.js,然后上传到 npm 就行。

2.PWA打包配置

可以通过 http-server 模拟一个服务器,就可以在 localhost: 8080 上访问了。而 PWA(线上才需要,底层原理是 service worker)就是第一 次访问后服务器挂了,还可以从本地加载上一次的缓存。靠 ↓这个插件就可以实现。

new workboxPlugin.GenerateSw({
clientsClaim: true,
skipwaiting: true})

打 包 后 dist 下 面 就 会 有 一 个 service-worker.js 和 precache-manifest 文件。 当然还需要添加一些业务代码来应用 service-worker,如果支 持 SW 则注册 SW,注册成功与失败再分别处理。

 

if ( 'serviceworker' in navigator) i
window.addEventListener( 'load', ()=>{
navigator.serviceworker.register( 'rvice-worker.
.then(registration {
console.log( "service-worker registed ' );}).catch(error =>{
console.log( 'service-worker register error' );})
})
}
I

3.TypeScript打包配置

const pathrequire( path;
module.exports = {
mode: 'production'
entry: './src/index.tsx',module: i
rules: [i
test: .tsx?$/,use: 'ts-loader',
exclude: /node_modules/H]
},
output: {
filename: ' bundle.js',
path: path.resolve(_dirname, 'dist' )}
}

这样子是远远不够的,还需要配置一个 tsconfig.json。 outDir 输出目录(其实 webpack 写了,这个无所谓),module 导入模块方式(ES6 模块),target 转换打包成 ES5 代码,allowJS 允许引入 JS 文件与否。

{
"compileropitons": {
"outDir" : "./dist","module" : "es6",
"target"" :"es5""allowJs": true'}
}

我们发现如果我们在 TS 中引入一些类库如 lodash,使用其方 法时传递的参数有误也不会报错,这是因为缺少类库的类型 文件,安装一下即可。命令:npm install @types/lodash --save-dev;

4.使用webpackDevServer实现请求转发

开发环境和线上环境可能请求的接口不一致,一般请求接口 的话是以相对路径的方式请求,默认就会以当前地址如 localhost:8080 开头什么的请求。

axios.get('/react/api/header.json')

这也不好,因为地址不对请求不到,所以就需要 webpack 做 转发,尽管表面上的地址并没有改变

devServer: {
contentBase: './dist' ,open: true,
port: 8080,hot: true,
hotOnly: true,Iproxy: {
'/ react/api': 'http://www.dell-lee.com' ,}

如果接口临时换成其它的,最好也不要直接改相对路径,改 webpack 就好。如↓就无需改动源码。

proxy: {
'/react/api': {
target: 'http://www. dell-lee.com' ,pathRewrite: 
" header-json': "demo.json'}
}
}
}

开发环境下 devServer 才会生效,线上就是相对于线上地址 的接口,不会有任何转发。 转发 HTTPS 则需要加 secure:false。 如果需要拦截的话如返回的是 html 就跳过转发,直接返回

index.html 或者 false(返回该返回的内容)。

 

bypass: function(req, res, proxyoptions) {
if (req. headers.accept.indexOf( 'html') !== -1){
console.log( 'Skipping proxy for browser request. ");return '/index. htmh';
}
}

底层是采用 http-proxy-middleware

5.webpackDevServer 解决单页面应用路由问题

import React, i component } from 'react' ;
import { BrowserRouter,Route } from 'react-router-dom';import ReactDom from 'react-dom';
import Home from './home.js ';
import List from './list.js';
class App extends Component i
render( {
return(
<BrowserRouter>
<div>
<Route path='/'exact component={HomeH/><Route path='/list' component={List}/></div>
</ BrowserRouter>
ReactDom.render(<App />, document.getElementById( 'root '));

为什么切换路由却找不到页面呢,因为 webpackDevServe(r 后 端)以为访问的是后端 list 页面,网页却只有 index.html,因 此页面就不存在了。如↓配置即可。\

如此就不管我们访问的路径是什么都会返回 index.html,html 里面的 main.js 也就是上面的 JS 代码就可以生效,即路由可 以起作用。 我们还可以重写路径(可以写成函数的形式),以下等同于 true(一般就直接 true 而已)。

historyApiFallback: {
rewrites: [i
from: 八.*/,
to: '/index. html'H]
},

线上这种路由跳转不会生效,需要后端去 nginxApache 上 配置路由转换规则。

6.EsLint webpack 中的配置

EsLint 其实与 webpack 关系不大。

ESLint 就是一个约束工具,约束我们写代码的规范.

命令:npm install eslint --save-dev; 需要通过 npx eslint --init 来智能生成规范配置;

2345_image_file_copy_378.jpg

我们就可以在.eslintrc.js 下看到我们的规范文件,第一种使用 方式是直接在命令行npx eslint src就可以检测src目录下的代 码。还需要再配置一个 parser 来转换一下 react 才能正常运行.

module.exports ={
"extends" : "airbnb",
"parser" : "babel-eslint"};
}

第二种是在编译器里使用插件来直接修改就行。 如果有些规范不想遵循就写个 0.

globals: {
document: false
}

代表 document 是全局变量,不能被覆盖。 当然了由于不是所有人都有 eslint 插件,可以在 webpack 中配置进去 eslint,让所有人都可以在编译器中看到问题.代表 document 是全局变量,不能被覆盖。 当然了由于不是所有人都有 eslint 插件,可以在 webpack 中配置进去 eslint,让所有人都可以在编译器中看到问题.

2345_image_file_copy_379.jpg

Vue 脚手架针对书写不规范会自动有如上的提示。 Eslint-loader 还有其它参数,比如 fix 修复一些代码简单的错 误、catch 提高打包速度等等。切记在打包前通过 eslint 检测, 当然也可以加force :‘pre’强制执行.

use: ['babel-loader',f
loader: 'elslint-loader',options: {
fix: true}
}]

配 置 eslint 最 佳 实 践 , 其 实 不 会 在 webpack 去 配 置 eslint-loader,因为会降低打包速度,而是在上传到仓库的时候通过 git 钩子去运行 eslint src ,当然了,这样子修改就比较麻烦.

相关文章
|
28天前
|
JavaScript 前端开发 UED
如何配置 Webpack 进行代码分离?
通过以上方法,可以有效地配置Webpack进行代码分离,根据项目的具体需求和场景选择合适的方式,能够显著提高应用的性能和用户体验。在实际应用中,还可以结合其他优化技术,进一步优化Webpack的打包结果和应用的加载速度。
40 5
|
28天前
|
前端开发 JavaScript
webpack相关配置
以上只是Webpack配置的一些常见部分,实际应用中还可以根据具体的项目需求和场景进行更复杂和细致的配置,以满足不同的构建和优化要求。
37 2
|
25天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
28天前
|
缓存 JavaScript 前端开发
配置 Webpack 进行代码分离的常见方法有哪些?
通过以上常见方法,可以根据项目的具体需求和场景,灵活地配置Webpack进行代码分离,从而提高应用的性能和加载速度,优化用户体验。
26 3
|
1月前
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
49 6
|
1月前
|
缓存 监控 前端开发
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第26天】前端工程化是现代Web开发的重要趋势,通过将前端代码视为工程来管理,提高了开发效率和质量。本文详细对比了Webpack和Gulp两大主流构建工具的选择与配置优化,并提供了具体示例代码。Webpack擅长模块化打包和资源管理,而Gulp则在任务编写和自动化构建方面更具灵活性。两者各有优势,需根据项目需求进行选择和优化。
68 7
|
1月前
|
缓存 前端开发 JavaScript
前端工程化:Webpack与Gulp的构建工具选择与配置优化
【10月更文挑战第27天】在现代前端开发中,构建工具的选择对项目的效率和可维护性至关重要。本文比较了Webpack和Gulp两个流行的构建工具,介绍了它们的特点和适用场景,并提供了配置优化的最佳实践。Webpack适合大型模块化项目,Gulp则适用于快速自动化构建流程。通过合理的配置优化,可以显著提升构建效率和性能。
39 2
|
1月前
|
JavaScript 前端开发 开发者
如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤
随着前端开发技术的快速发展,代码规范和格式化工具变得尤为重要。本文介绍了如何在 Visual Studio Code (VSCode) 中使用 ESLint 和 Prettier 检查代码规范并自动格式化 Vue.js 代码,包括安装插件、配置 ESLint 和 Prettier 以及 VSCode 设置的具体步骤。通过这些工具,可以显著提升编码效率和代码质量。
380 4
|
Web App开发 JSON JavaScript
Vue 实战 (一) -- Vue 基础总结
Vue作为一个前端轻量级的MVVM框架有其独到之处,本文主要针对Vue1.0版本的官方文档进行梳理总结,主要包括以下几个方面:1.数据绑定2.指令3.组件4.事件5.过滤器
2442 0
|
20天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
34 1
vue学习第四章