首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

腾讯 IMWeb 团队的前端构建秘籍

单页面应用入口配置通常做法配置:vendor.js 第三方依赖库,polyfill.js 特性填充库,index.js 单页面应用入口文件 // 导出配置module.exports = { entry.../src/vendor.js', polyfill: './src/polyfill.js', index: '....bundle中; 将react全家桶打入react.js bundle中; 如果项目依赖了antd,那么将antd打入单独的bundle中; 最后剩下的业务模块超过3次引用的公共模块,将自动提取公共块...如果使用了 postcss-custom-properties,需要注意在8.x版本中存在一个bug,无法解析如下语法: :root{ --green: var(--customGreen, #08cb6a...-primary) shade(5%)); // 上面面这句将会被转换为如下代码,最终导致浏览器无法解析该语法 background: var(--green); background: var(

1.5K30

体积太大,怎么拆包?--vite

解决循环引用问题从报错信息追溯到产物中,可以发现react-vendor.js与index.js发生了循环引用:// react-vendor.e2c4883f.jsimport { q as objectAssign.../react-vendor.e2c4883f.js";这是很典型的 ES 模块循环引用的场景,我们可以用一个最基本的例子来复原这个场景:// a.jsimport { funcB } from '....而对于如上打包产物的执行过程也是同理:可能你会有疑问: react-vendor为什么需要引用index.js的代码呢?...其实也很好理解,我们之前在munaulChunks中仅仅将路径包含 react 的模块打包到react-vendor中,殊不知,像object-assign这种 react 本身的依赖并没有打包进react-vendor...在 manualChunks 中拿到模块的详细信息,向上追溯它的引用者,如果命中 react 的路径,则将模块放到 react-vendor中。

4.2K100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    重学webpack4之构建速度提升和体积优化

    使用字符串方案替代正则表达式,正则表达式运算较慢 多进程/多实例构建 thread-loader(推荐:wepback4使用) 每次wepback解析一个模块,thread-loader会将它及它的依赖分配给...进一步分包:预编译资源模块 dll 将 react、react-dom、redux、react-redux基础包和业务包打包成一个文件 方法:使用DLLPlugin进行分包,DllReferencePlugin...对manifest.json引用 这么做的优势:开发和生产环境就可以直接跳过 react等的解析打包,加快热更新及打包速度 1.创建webpack.dev.js const path = require.../dist/dll/vendor-manifest.json') new HtmlWebpackPlugin({ filename: 'index.html', template: resolve.../src/index.html'), // 线上环境使用CDN,不过个人觉得开发环境用dll,线上环境不要用dll vendor: '.

    1.2K20

    webpack4大结局:加入腾讯IM配置策略,实现前端工程化环境极致优化

    CSS模块化,不怕命名冲突 小图片的base64处理 文件后缀省掉jsx js json等 实现React懒加载,按需加载 , 代码分割 并且支持服务端渲染 支持less sass stylus等预处理...bundle中; 将react全家桶打入react.js bundle中; 如果项目依赖了antd,那么将antd打入单独的bundle中;(其实不用这样,可以看我下面的babel配置,性能更高) 最后剩下的业务模块超过.../Test/index.jsx'), loading: Loading, }); class Assets extends React.Component...加入 babel-loader 还有 解析JSX ES6语法的 babel preset @babel/preset-react解析 jsx语法 @babel/preset-env解析es6...语法 @babel/plugin-syntax-dynamic-import解析react-loadable的import按需加载,附带code spliting功能 ["import", { libraryName

    2.1K30

    webpack实战——打包优化【中】

    在打包vendor的时候还会附加生成一份vendor的模块清单,这份清单将会在工程业务模块打包时起到链接和索引的作用。...业务打包时将会使用这个清单进行模块索引; 2 vendor打包 接下来就要打包vendor并且生成资源清单。...hasn].js 现在vendor中you一些模块,例如包含了react,其id为5.当尝试添加更多模块到vendor中的时候,那么重新进行Dll构建时,moment.js可能出现在react之前,此时...两个页面chunk hash没有改变,但是这种情况更为糟糕:vendor中的模块id改变了,但是用户没有更新缓存,使用的还是旧版本的内容,而引用不到新的vendor模块,导致页面发生错误。...并且对于开发者而言,这个错误却难以排查,因为开发环境下一切正常!

    89750

    从零搭建一个 webpack 脚手架工具(三)

    vendor: { // 只要是在 /node_modules/ 目录下引入的模块就会被抽离出来成为一个单独的文件 test: /node_modules...minChunks 表示该模块被 n 个入口同时引用才会进行提取,比如在写 React 程序时,React 模块会被经常引入,这时候就有必要进行提取一些,当然也可以设置成 Infinity 表示所有模块都不会被提取...,webpack 会检测这个模块有没有依赖别的模块,如果没有依赖别的模块,可以使用 noParse 配置项让 webpack 不再做多余的解析。...noParse: /jquery/ 表示不再解析 jquery 模块。 ignorePlugin webpack 的一个内置插件。该插件可以忽略掉指定的文件。...当然,也可以使用 react-app-rewired 模块对 webpack 配置做修改,该模块的好处是,你不需要将配置文件暴露出来就进行修改。这里就不做介绍了。

    1.4K10

    你可能不知道的9条Webpack优化策略

    有时候我们的项目中会用到很多模块,但有些模块其实是不需要被解析的。这时我们就可以通过缩小构建目标或者减少文件搜索范围的方式来对构建做适当的优化。...缩小构建目标 主要是exclude 与 include的使用: exclude: 不需要被解析的模块 include: 需要被解析的模块 // webpack.config.js const path...resolve.modules:告诉 webpack 解析模块时应该搜索的目录 resolve.mainFields:当从 npm 包中导入模块时(例如,import * as React from '...根据 webpack 配置中指定的 target 不同,默认值也会有所不同 resolve.mainFiles:解析目录时要使用的文件名,默认是index resolve.extensions:文件扩展名...❝由于 Scope Hoisting 需要分析出模块之间的依赖关系,因此源码必须采用 ES6 模块化语句,不然它将无法生效。❞ 参考 极客时间 【玩转 webpack】

    1.8K31

    webpack提升构建速度

    配置优化减少 resolve 的解析在前边第三小节我们详细介绍了 webpack 的 resolve 配置,如果我们可以精简 resolve 配置,让 webpack 在查询模块路径时尽可能快速地定位到需要的模块.../index.scss') extensions: [".js"], // 避免新增默认文件,编码时使用详细的文件路径,代码会更容易解读,也有益于提高构建速度 mainFiles: ['index.../lib/slider/index.js',这样的代码既清晰易懂,webpack 也不用去多次查询来确定使用哪个文件,一步到位。...', entry: ['react', 'react-dom'], // 这个例子我们打包 react & react-dom 作为公共类库 output: { path: path.resolve...你会发现构建结果的应用代码中不包含 react 和 react-dom 的代码内容,这一部分代码内容会放在 vendor.js 这个文件中,而你的应用要正常使用的话,需要在 HTML 文件中按顺序引用这两个代码文件

    556180

    ES Module

    非常原始的模块化方案,没有实质性的好处(比如模块作用域,依赖处理,模块间错误隔离等等) 2.多script标签 模块依赖问题,提供了模块作用域,错误隔离/捕获等方案。...社区实现的模块化补丁都只是过渡产物,目前看来,JS似乎终将迎来模块化特性 5.CommonJS NodeJS示例: // polyfill-vendor.js // polyfills-vendor...import引入,也无法通过script标签以模块方式加载 7.HTTPS资源无法importHTTP资源 类似于HTTPS页面加载HTTP资源,会被block掉 8.模块是单例 不同于普通script...2.模块间错误隔离仍然是个问题 资源加载错误:动态插入script加载模块,onerror监听加载异常 模块初始化错误:window.onerror全局捕获,尝试通过错误信息找出模块名,记下模块初始化失败

    94430
    领券