当前位置: 首页 > news >正文

山西高端建设网站网站设计的基本原则

山西高端建设网站,网站设计的基本原则,滁州做网站公司,徐州做网站xlec前言 最近在公司的一个项目中使用到了Webpack5, 然而在使用某个npm包的时候,出现了Buffer is not defined 这个问题,原因很明显了,因为浏览器运行时没有Buffer这个API,所以需要为浏览器引入Buffer Polyfill. Webpack5…

前言

最近在公司的一个项目中使用到了Webpack5, 然而在使用某个npm包的时候,出现了Buffer is not defined 这个问题,原因很明显了,因为浏览器运行时没有Buffer这个API,所以需要为浏览器引入Buffer Polyfill.

Webpack5

这种在Webpack项目下使用NodeJS包的场景应该是很常见的,为什么之前没有遇到过这个问题。因为Webpack5之前的版本,Webpack会自动为我们引入NodeJS API Polyfill, 然而Webpack5之后,官方认为自动引入Polyfill会导致bundle体积过大,并且大多数情况下这些自动引入的Polyfill是没有用到的。所以Webpack5需要我们手动引入Polyfill

配置Webpack5

安装Buffer Polyfill

我们需要先安装兼容浏览器环境的Buffer实现。这里使用的是buffer这个npm包

npm install -D buffer 

配置 Fallback

Webpack resolve.fallback指定了当我们的目标构建环境中不存在对应的包时,将使用fallback的值作为回退。这里我们使用安装的buffer包作为fallback

{resolve: {fallback: {buffer: require.resolve('buffer/'),},},
} 

这里使用了’buffer/', 这样可以明确告诉NodeJS模块查询算法,使用buffer npm包,而不是NodeJS自带的buffer模块

配置ProvidePlugin

Webpack ProvidePlugin可以注入一个模块或者值,作为全局变量。我们之后可以直接使用被注入的全局变量,无需import/require

{plugins: [new webpack.ProvidePlugin({Buffer: ['buffer', 'Buffer'], // ['包名', '包中的值']})]
} 

上面的配置相当于

const Buffer = require('buffer').Buffer; 

完整配置

 {resolve: {fallback: {buffer: require.resolve('buffer/'),},},plugins: [new webpack.ProvidePlugin({Buffer: ['buffer', 'Buffer'],})]
} 

package.json browser字段

经过上面的配置,正常情况下就可以解决Buffer is not defined 这个问题了。然而我使用的公司内部的某个npm包却报出了新的问题Cannot read properties of undefined(reading 'allocUnsafe') , 其它依赖buffer的包则一切正常。

经过排查,和这个包的package.json browser字段有关。

// package.json
{"browser": {"buffer": false}
} 

按照非npm官方规范(github.com/defunctzomb…),browser可以有三种用途

1.main字段的替代。npm官方文档中介绍的用途,值为string类型,用于指定浏览器环境的包入口"browser": "./browser/specific/main.js" 2.替代指定文件。左侧为你需要替换的模块或文件名称,右侧为替换项"browser": {"module-a": "./shims/module-a.js","./server/only.js": "./shims/client-only.js"} 3.忽略模块。设置false可以阻止模块或文件被打包到包中"browser": {"module-a": false} 以上配置会导致a为undefinedconst a = require('module-a'); 解决方法也很简单,让包的维护者把package.json中的browser字段删除即可。至此,所有报错全部解决,可以愉快地使用Buffer API了

结语

Webpack5不再自动为我们引入NodeJS Polyfill, 我们可以安装兼容浏览器环境的npm包,然后通过配置resolve.fallback以及providePlugin插件来手动引入;如果配置完成后,某些包还是有问题,可以尝试检查对应包中的package.json browser字段

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

http://www.mmbaike.com/news/57728.html

相关文章:

  • 青岛有哪些做网站的公司贴吧高级搜索
  • 北京网站托管的公司搜索引擎有哪些种类
  • 高端网站建设方案网站建设怎么弄
  • 福州网站建设公司哪家比较好各种手艺培训班
  • 什么网站做推广最好免费个人网站模板
  • 淄博做网站推广公司seo推广方式是什么呢
  • 靖江 建设局网站线上销售怎么做推广
  • 国内外贸免费网站建设搜索引擎优化策略包括
  • jq 网站模板新闻发布最新新闻
  • 西安域名注册网站建设百度推广app下载
  • 做电商网站的参考书怎么做链接推广产品
  • wordpress首页错位seo教程优化
  • 如何建设 营销型 网站网站怎么推广效果好一点呢
  • 聚美优品网站模版网页宣传
  • 做网站工作都包括什么网络营销与电子商务的区别
  • 做任务推广网站手机优化软件哪个好
  • 海南建设银行招聘网站如何使用免费b站推广网站
  • asp.net做报名网站如何进行搜索引擎营销
  • 思想政治教育专题网站建设百度竞价sem入门教程
  • 做短视频网站用哪家cms北京百度竞价托管公司
  • 河南网站建设推荐网站广告投放收费标准
  • 做网站维护要什么专业北京优化推广
  • 怎样用ps做电子商务网站seo刷排名软件
  • 功能类网站深圳营销型网站设计公司
  • 招聘网站建设价格深圳网站开发
  • 做电子商务网站的意义网络营销和传统营销的区别有哪些
  • 青岛制作外包seo服务收费标准
  • 经营购物网站优化关键词排名提升
  • 网站建设模板怎么设计seo会被取代吗
  • 洛阳网站建设价格北京网站制作建设公司