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

Webpack 性能系列三:提升编译性能

/a' ,Webpack 会遍历 resolve.extensions 定义的后缀名列表,尝试 './a' 路径追加后缀名,搜索对应物理文件。...这样的 npm 包导入语句时,会尝试先当前项目的 node_modules 搜索资源,如果找不到则按目录层级尝试逐级向上查找 node_modules 目录,如果依然找不到则最终尝试全局 node_modules.../ 属性后,Webpack 处理 node_modules 中的 js 文件时会直接跳过这个 rule ,不会为这些文件执行后续的 Loader。...watchOptions: { ignored: /node_modules/ }, }; 六、跳过 TS 类型检查 JavaScript 本身是一门弱类型语言,这在多人协作项目中经常会引起一些不必要的类型错误...不过,类型检查涉及 AST 解析、遍历以及其它非常消耗 CPU 的操作,会给工程化流程引入性能负担,必要时开发者可选择关闭编译主进程中的类型检查功能,同步用 fork-ts-checker-webpack-plugin

1.2K20

会写 TypeScript 但你真的会 TS 编译配置吗?

最近遇到了挺多涉及到前端“编译”方面的工作,其中关于 TypeScript 的编译会涉及到关于 tsconfig.json 文件的配置,由于配置繁杂,遂逐一解析并验证,减少大家的一些疑惑,并提升工作效率...但是 TypeScript 并不可以直接运行,而是需要转换成 JavaScript 代码才可以 Node.js 或浏览器环境下执行,因此我们需要通过“编译器”将 TS 代码转换为 JS 代码。...举个,遇到 import {a} from 'a-lib'; 这样的模块引入代码应该如何去(解析)查找到对应的模块文件。...(6). baseUrl & paths baseUrl:设置基本目录以解析非绝对模块名称(定义一个根目录,以此进行绝对文件路径解析) paths:用于设置模块名或路径映射列表,这样就可以简写项目中自定义模块的文件路径...(即,不允许switch的case语句贯穿) /* 模块解析选项 */ "moduleResolution": "node", // 选择模块解析策略: 'node' (Node.js

3.4K41
您找到你想要的搜索结果了吗?
是的
没有找到

【TypeScript】实战中的一些总结

1.node的npm包 node编程中最重要的思想之一就是模块。当然这也是其他编程语言的思想。...【One by one系列】一步步学习TypeScript 3.ts声明文件 以前称为类型定义文件,.d.ts使用 TypeScript 开发的项目中,常常需要引入公共模块,或者第三方库。...如果这些公共模块或第三方库是用 JS 写的,那么 TS无法检测到类型信息,在编译阶段会报错。 能不能将这些公共模块或第三方库的代码用 TS 重写呢?...4.ts引入js模块TS目中引入了js模块TS 默认会去同级目录下找同名的声明文件(eg:index.js→index.d.ts),找不到就要报错,也就意味着我们可能ts无法使用 5.编译d.ts...*6.编译的错 TypeScript 错误 “Module '...' has no default export 这是因为引入的模块没有声明任何default导出对象。

1.3K10

创建 React 应用的 7 种方式,你用过几种?

vite 采用浏览器支持 ES 模块来解决开发时构建缓慢的问题,使用 esbuild 预构建依赖(开发时不会变动的纯 JavaScript 代码,一般是 node_modules 中的第三方包)。...创建 gatsby 应用 npm init gatsby 命令行中选择开发语言,是否使用 CMS、是否支持、md、mdx 等 创建完成后,命令行运行 npm run dev,打开 http://localhost...创建 Next.js 应用 npx create-next-app@latest --ts 目中,您可以编写 react 组件,并使用 Next.js 提供的 API 进行路由配置、服务端渲染等操作...目中,您可以编写 react 组件,例如,您可以 src/pages 目录下创建一个 Home.js 文件. import React from 'react' function Home()...这样,您就可以目中使用 umijs 实现路由配置和组件开发了。更多关于 umijs 的用法,请参考它的文档 优点: 提供了丰富的插件,可以快速搭建应用。

6.3K10

巧妙利用TypeScript模块声明帮助你解决声明拓展

\n\n## 首先我们来看看相对模块的加载方式:\n\nTypeScript 将 TypeScript 源文件扩展名(.ts、.tsx和.d.ts)覆盖 Node解析逻辑上。...\n\n此时,TS 仍然会按照 node模块解析规则,继续向上进行目录查找,比如又会进入上层目录 /root/node_modules/moduleb.ts ...进行查找,直到查找到顶层 node_modules...\n\n比如, TS目中我们需要引入一些后缀为 png 的图片资源,那么此时 TS无法识别此模块的。...\n\n这是一个有意思的问题,按照上边我们提到的模块加载机制要么按照相对模块机制查找,要么按照对应的 node 模块解析机制进行查找。\n\n怎么会查找到定义项目目录中的 image.d.ts 呢?...;)\n\n\n正常来说,ts解析目中所有的 *.ts 文件,当然也包含以 .d.ts 结尾的文件。

1.3K30

深入理解 TypeScript 模块

因此,TypeScript Node.js 解析逻辑基础上增加了 TypeScript 源文件的扩展名(.ts、.tsx、.d.ts)。...涉及到下面两个配置: baseUrl:解析非相对模块的根地址,默认是当前目录 paths:路径映射别名,相对于baseUrl 比如我们项目中的基础模块,由于和业务模块是独立的,如果使用相对路径进行引用...利用配置 rootDirs,可以告诉编译器生成这个虚拟目录的 roots;因此编译器可以“虚拟”目录下解析相对模块导入,就好像它们被合并在了一起一样。。...▐ 11.3 自定义模块解析只是一种标记 当你按照上面的配置完成自定义模块解析之后,你会发现代码运行起来之后依然找不到对应的模块,这是为什么?...,编译器解析模块时可能访问当前文件夹外的文件,这会导致很难诊断模块为什么没有被解析,或解析到了错误的位置。

2.5K30

他居然把 React 组件跑命令行终端窗口里面!

也就是说,前端的能力以及扩展到了命令行窗口当中了,这无疑是一非常可怕的能力。著名的文档生成工具Gatsby,包管理工具yarn2都使用了这项能力来完成终端 GUI 的搭建。...项目背景 首先说一说项目的产生背景,一个 TS 的业务项目当中,我们曾经碰到了一个问题:由于production模式下面,我们是采用先 tsc,拿到 js 产物代码,再用webpack打包这些产物。...但构建的时候直接报错了,原因就是 tsc 无法ts(x) 以外的资源文件移动到产物目录,以至于 webpack 在对于产物进行打包的时候,发现有些资源文件根本找不到!...p.includes('node_modules') && !p.endsWith('.ts') && !...具体来讲,我们文件操作的逻辑中维护一个 EventBus 对象,然后 React 组件当中,通过 Context 的方式传入这个 EventBus。从而完成 UI 和文件操作模块的通信。

66420

Yarn 4.0 正式发布,性能大幅提升!

yarn workspaces foreach 命令语法略有改动 Corepack 自从 Yarn 2.0 版本以来,官方的建议是使用 yarnPath 设置来每个项目中安装 Yarn(可以通过 yarn...在此模式下运行时,Yarn 将执行两个额外的验证: 验证 lock文件中 存储的解析规则是否与范围所能解析到的版本一致。...当我们目中定义了依赖的范围(例如使用 "^" 或 "~" 等符号指定的版本范围),Yarn 会根据这些范围来解析并选择合适的版本安装到项目中。...但是,有时解析依赖时可能会出现问题,例如范围可能无法解析到满足所有依赖的兼容版本,或者范围太宽松导致安装了过多的依赖。...例如,以下是从缓存安装 Gatsby 及其约 350MB 依赖关系树的时间差。

91030

Typescript真香秘笈

但是我们实际工程的开发中,一般不会直接用tsc,例如在前端项目中,我们希望能与tsc能和webpack结合起来。node服务端项目中,我们希望修改文件之后,能够只编译修改过的文件,并且重启服务。...node项目: node目中,可以直接使用tsc编译文件,然后重启服务,但是这样开发阶段显然是非常低效的。 能不能让node直接执行ts文件呢?...它的原理是对node进行了一层封装,require ts模块的时候,先调用tsc将ts文件编译成js文件,然后再用node执行。...如果项目很庞大,无法一下子全部重构,实际上也不妨碍使用tstsconfig.json文件中配置allowJs: true就可以兼容js。 对于项目中的js文件,有三种处理方式。 不做任何处理。...ts文件中引入npm安装的模块,可能会出现报错,这是因为tsc找不到该npm包中的类型定义文件,因为有些库是将类型定义文件和源码分离的。

5.6K20

深度解读 Vite 的依赖扫描?

Node.js 定义了 bare import 的寻址机制 —— 在当前目录下的 node_modules 下寻找,找不到则往上一级目录的 node_modules,直到目录为根路径,不能再往上。...实际上,Vite 会判断模块的实际路径,是否 node_modules 中:实际路径 node_modules 的模块会被预构建,这是第三方模块实际路径不在 node_modules 的模块,证明该模块是通过文件链接.../mian.ts 正常解析和加载即可,esbuild 本身能处理 JS html 类型模块 index.html、app.vue加载过程中.../mian.ts 正常解析和加载即可,esbuild 本身能处理 JS html 类型模块 index.html、app.vue加载过程中...最后对这部分的源码进行了解析:最复杂的就是 html 类型模块的处理,需要使用虚拟模块;当遇到 bare import 时,需要判断是否 node_modules 中,的才记录依赖,然后 external

1.2K20

深度解读 Vite 的依赖扫描?

实际上,Vite 会判断模块的实际路径,是否 node_modules 中: • 实际路径 node_modules 的模块会被预构建,这是第三方模块 • 实际路径不在 node_modules 的模块...html 加载过程中转换为 js 不深入处理模块 esbuild 可以解析过程,指定当前解析模块为 external则 esbuild 不再深入解析和加载该模块。.../mian.ts 正常解析和加载即可,esbuild 本身能处理 JS html 类型模块 index.html、app.vue 加载过程中,将这些模块加载成 JS 最后 dep 对象中收集到的依赖就是依赖扫描的结果.../mian.ts 正常解析和加载即可,esbuild 本身能处理 JS html 类型模块 index.html、app.vue 加载过程中,将这些模块加载成 JS JS 模块 esbuild 本身就能处理...最后对这部分的源码进行了解析: • 最复杂的就是 html 类型模块的处理,需要使用虚拟模块; • 当遇到 bare import 时,需要判断是否 node_modules 中,的才记录依赖,然后

87820

旧项目TypeScript改造问题与解决方案记

改造问题记录与分析 VSCode相关 “无法找到相关模块”报错 目中,如果我们使用了webpack.alias,可能会提示找不到模块。...具体错误如下: 终端编译报错:TS2307: Cannot find module '_utils/index'. 编辑器报错:[ts]找不到模块“_utils/index”。...这是由于编辑器无法读取对应的别名信息导致的。 此时我们需要检查对应的模块是否存在。...如果确认模块存在,且终端编译编译时不报错,而只是编辑器报错,则是因为编辑器无法读取webpack配置,我们需要增加另外的配置。...JavaScript项目中的jsconfig.json同理。 TypeScript相关 对象属性赋值报错 JavaScript中,我们经常会声明一个空对象,然后再给这个属性进行赋值。

4.9K10

一杯茶的时间,上手 Gatsby 搭建个人博客

Debug GraphQL Gatsby 魔法带来的另外一个坑是 GraphQL 报错信息不全,可能会默默被吞掉,也可能无法定位到最终文件。...我修改 starter 时踩到一个坑是复制组件时忘了修改 static query 查询语句的名称,导致重名报错。 避免错误最好方式是 GraphiQL 编辑器中写好运行无误再复制到组件中。...Netlify CMS 是跟项目一起发布的,默认是 /admin 页面下。文章也是存在源项目中,就是原来默认的 Markdown 文件。...Widgets 代表了 CMS 中可输入的模块,官方[21]为常见的类型都提供了默认的 widgets ,没有满足的也可以自定义[22]。... /gatsby-node.js 中配置 Gatsby Node APIs,如果项目是基于 starter 的话你很可能会发现里面已经有相应的配置。

3.2K20

巧用 exports 和 typeVersions 提升 npm 包用户使用体验

该字段的值应为相对于模块根目录的路径或者是一个模块名(如index.js或lib/mymodule.js,如果是模块名,则需要保证模块根目录下存在该模块)。...但是如果想实现更精细化的导出控制就无法满足 当我们一个库本身同时包含运行时和编译时的导出时,如果我们导出的模块在编译时(node 环境)包含副作用,如果运行时模块也从同一入口导出就会出现问题 // 例如编译时入口存在以下编译时副作用...该字段 Node.js 12 版本中引入,可用来大幅简化模块的导出方式,支持同时支持多个环境下的导出方式,提供了更好的可读性和可维护性 支持以下用法 多文件导出 "name": "pkg",...如果找到了对应的模块文件,则直接返回该路径;否则抛出错误 通过相关上述代码我们可以知道 对于解析es导入,webpack会尝试读取exports字段的导出,依次读取import和node字段。.../foo';时,Webpack解析模块请求时会直接将 .

28610

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券