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

模块解析机制_TypeScript笔记14

写在前面 模块化机制让我们能够把代码拆分成多个模块(文件),而编译时需要知道依赖模块的确切类型,那么首先要找到它(建立模块名到模块文件路径的映射) 实际上,在 TypeScript 里,一个模块名可能对应一个...用来引入外部依赖模块 二.模块解析策略 具体的,有 2 种模块解析策略: Classic:TypeScript 默认的解析策略,目前仅用作向后兼容 Node:与 NodeJS 模块机制一致的解析策略 这...里寻找d.ts声明文件 三.附加模块解析标记 构建时会把.ts编译成.js,并从不同的源位置把依赖拷贝到同一个输出位置。...P.S.注意,编译器并不会进行任何转换,只用这些信息来指导解析模块引入到其定义文件的过程 Base URL baseUrl在遵循AMD模块的应用中很常见,模块的源文件可以位于不同的目录,由构建脚本把它们放到一起...在运行时,这些模块会被“部署”到单个目录下 TypeScript 里通过设置baseUrl来告知编译器该去哪里找模块,所有非相对模块引入都是相对于baseUrl的,有两种指定方式: 命令行参数--baseUrl

1.7K30

使用Yarn workspace,TypeScript,esbuild,React和Express构建 K8S 云原生应用(一)

TypeScript 现在,我们将第一个依赖项添加到我们的项目:TypeScript。TypeScript 是 JavaScript 的超集,可在构建时实现类型检查。...yarn.lock 文件(该文件确保在项目的整个生命周期中依赖项的预期版本保持不变)和一个 node_modules 文件夹,该文件夹保存依赖项的 binaries。...JavaScript 代码,并将所有外部库打包到单个文件中,我们将使用打包工具。...如您所见,在此步骤中,我们仅复制与依赖项相关的文件。这是因为 Docker 将每个构建中的命令的每个结果缓存为一层。...因为我们要优化构建时间和带宽,所以我们只想在依赖项发生更改(通常比文件更改发生的频率小)时重新安装它们。 RUN 在 shell 中执行命令。

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

    深入理解 TypeScript 模块

    TypeScript 中的模块如何查找的,为什么会隐式查找到index.ts、index.js,为什么会到 node_modules 中去找模块? 如何定义一个全局变量供所有代码共享?...文件模块 ---- 只要一个 JavaScript 文件中包含 imports 导入模块 或者 exports 导出模块 的声明,那它就是一个模块,严谨点应该叫文件模块。...,TypeScript 会优先选择 .ts 文件而不是 .d.ts 文件 非相对路径 非相对模块的导入,编译器则会从包含导入文件的目录开始依次向上级目录遍历,尝试定位匹配的声明文件。...通常 tsconfig.json 文件主要包含两部分内容:指定待编译文件和定义编译选项。 tsconfig.json 的配置项可以用一张图来简单进行说明: ?...构建中的一步会将/src/views和/generated/templates/views的输出拷贝到同一个目录下。在运行时,视图可以假设它的模版与它同在一个目录下,因此可以使用相对导入".

    2.5K30

    不影响开发体验,如何将单体 Node.js 变成 Monorepo

    它们是用 TypeScript 编写的,并转译为 JavaScript 在生产环境中运行。这两个服务器共用一套开发工具(用于检查、测试、构建和部署服务器)和 npm 依赖。...也很容易编写覆盖多个服务器的端到端测试,并将它们包含在存储库中,因为所有东西都在一个地方。遗憾的是,这些服务器的源代码是单体的。我的意思是,各服务器的代码是分不开的。...构建和部署流程的配置:优化 Dockerfile,使其只包含要构建的服务器所需的文件和依赖。 跨包脚本的配置:使用 Turborepo 编排影响多个包的 npm 脚本的执行(如构建、测试、分析)。...我们可以把这些依赖项和文件留在根目录一级,那样所有包都可以共用。或者在每个包中复制一份。当然,还有更好的方法。...然后,把它们作为依赖项添加到每个包含源代码的包中,并创建配置文件扩展它们: packages/*/.eslintrc.js: module.exports

    1.9K20

    TypeScript学习笔记(三)—— 编译选项、声明文件

    上述示例中,所有src目录和tests目录下的文件都会被编译 exclude 定义需要排除在外的目录 默认值:["node_modules", "bower_components.../configs/base" 上述示例中,当前配置文件中会自动包含config目录下base.json中的所有配置信息 files 指定被编译文件的列表,只有需要编译的文件少时才会用到..." } 设置后编译后的js文件将会生成到dist目录 outFile 将所有的文件编译为一个js文件 默认会将所有的编写在全局作用域中的代码合并为一个js文件,如果module制定了...1.1、tsconfig.json 的作⽤ ⽤于标识 TypeScript 项⽬的根路径; ⽤于配置 TypeScript 编译器; ⽤于指定编译的⽂件。.../src", 其中 allowJs 配置告诉 typescript 编辑器将 js 文件中的所有变量和方法都设置 any 类型,这样 typescript 编译器就能识别 js 文件了。

    2.6K20

    ES5 在 Web 上的现状

    polyfills——它会包含71 个 core-js 依赖项,并从 31 字节增加到11,217 字节的最小化代码!...而 TypeScript(tsc),作为仅次于 Babel 的第二大转译工具,只会转译项目自己的代码文件。它不会转译node_modules中的项目依赖项。...对于一个网站来说,提供包含 ES5 助手和未转译 ES6+语法的代码,实际上只有两种可能的解释: 该网站不需要支持 ES5 浏览器,但他们的一些依赖项转译为 ES5,因此 ES5 代码出现在他们的输出中...该网站打算支持 ES5 浏览器,但他们没有意识到一些依赖项发布了未转译的 ES6+语法,并且他们没有配置打包器来转译node_modules中的代码。...然而,如今构建工具已经变得显著更快。此外,网站可以配置他们的构建,只在生产环境中处理node_modules中的代码。

    13110

    「译」面向 JavaScript 开发人员的 TSConfig 简介

    include - 指定 TypeScript 的文件路径或 glob 模式数组,应该包含在编译过程中。仅匹配指定的文件模式将被考虑进行编译。...其他 TSConfig 设置include – 指定 TypeScript 应该在编译过程中包含的文件路径或 glob 模式的数组。只有匹配指定模式的文件才会被考虑进行编译。...如果没有指定 include,TypeScript 默认将项目目录中的所有 .ts、.tsx 和 .d.ts 文件纳入编译。...Incremental Builds 增量构建 - TypeScript 的增量构建功能跟踪你的项目文件和依赖项的更改,允许它仅重新构建自上次编译以来已更改的项目部分。这可以提高大型项目的编译时间。...Override Options 选项覆盖 - 你可以使用 TypeScript 源文件中的注释指令为单个文件或文件集覆盖特定的编译器选项。

    11210

    lerna最佳实践

    multirepo 可以让每个团队都拥有自己的仓库,他们可以使用自己的构建流程、代码规范等,但是同时也会存在很多问题,比如模块之间如果存在相互依赖,就必须到目标仓库里进行bug修复、构建、发版本等,相互依赖关系越复杂...,因此我们可以通过 --hoist 来抽取重复的依赖到最外层的 node_modules 目录下,同时最外层的 package.josn 的依赖信息也不会进行更新。...package 的 node_modules 中,只有依赖版本号一致的时候才会提升到顶层,而 lerna 会进到每个 package 中执行 yarn/npm install,因此会在每个 package...这类包一般都是一些开发依赖,比如将 ts 代码转换成 es5 代码或者一些代码校验工具等。通过这种方式安装的依赖包是装在根目录下的 node_modules 中。...build: 构建工具或者外部依赖包的修改,比如更新依赖包的版本 ci: 持续集成的配置文件或者脚本的修改 chore: 杂项,其他不需要修改源代码或不需要修改测试代码的修改 revert: 撤销某次提交

    1.9K20

    【TS】612- 了不起的 tsconfig.json 指南

    在 TypeScript 开发中,tsconfig.json 是个不可或缺的配置文件,它是我们在 TS 项目中最常见的配置文件,那么你真的了解这个文件吗?它里面都有哪些优秀配置?...当入口文件依赖其他文件时,不需要将被依赖文件也指定到 files 中,因为编译器会自动将所有的依赖文件归纳为编译对象,即 index.ts 依赖 user.ts 时,不需要在 files 中指定 user.ts...默认包含当前目录和子目录下所有 TypeScript 文件。 { // ... // 把基础配置抽离成tsconfig.base.json文件,然后引入 "extends": "..../tsconfig.base.json" } 5. files files 属性作用是指定需要编译的单个文件列表。 默认包含当前目录和子目录下所有 TypeScript 文件。...文中通过一个简单 learnTsconfig 项目,让大家知道项目中如何使用 tsconfig.json 文件。在后续文章中,我们将这么多的配置项进行分类学习。

    2.1K30

    rollup打包ts+react最佳实践

    $ rollup m1.js m2.js --dir dist 上面命令会在目录dist,打包生成多个文件:m1.js、m2.js、以及它们共同的依赖项(如果有的话)。...,rollup也会有它的一个配置文件,下面就简单介绍一下常用的一些配置项。...支持引用node_modules外部依赖 在 Rollup 中,我们要想使用 node_modules 里面的包,必须使用 @rollup/plugin-node-resolve 这个插件才行 这一点和...import * from '@/xxx/xxx'; 配置外部引用 rollup默认会将我们用到的依赖项全部打包进bundle中,有的时候会造成我们的bundle特别的打大,我们可以通过配置exteral...来将它们改为外部依赖,以此来减小我们的包体积 配置 input:... output:... external:['react'] //告诉rollup不要将此react打包,而作为外部依赖,在使用该库时需要先安装相关依赖

    3.7K20

    了不起的 tsconfig.json 指南

    在 TypeScript 开发中,tsconfig.json 是个不可或缺的配置文件,它是我们在 TS 项目中最常见的配置文件,那么你真的了解这个文件吗?它里面都有哪些优秀配置?...当入口文件依赖其他文件时,不需要将被依赖文件也指定到 files 中,因为编译器会自动将所有的依赖文件归纳为编译对象,即 index.ts 依赖 user.ts 时,不需要在 files 中指定 user.ts...默认包含当前目录和子目录下所有 TypeScript 文件。 { // ... // 把基础配置抽离成tsconfig.base.json文件,然后引入 "extends": "..../tsconfig.base.json" } 5. files files 属性作用是指定需要编译的单个文件列表。 默认包含当前目录和子目录下所有 TypeScript 文件。...文中通过一个简单 learnTsconfig 项目,让大家知道项目中如何使用 tsconfig.json 文件。在后续文章中,我们将这么多的配置项进行分类学习。

    4K10

    基于pnpm + lerna + typescript的最佳项目实践 - 理论篇

    嵌套安装 在 npm@3 之前,node_modules结构是干净、可预测的,因为node_modules 中的每个依赖项都有自己的node_modules文件夹,在package.json中指定了所有依赖项...通过前面的讲解,我们知道了pnpm在全局通过Store来存储所有的node_modules依赖,并且在.pnpm/node_modules中存储项目的hard links,通过hard link来链接真实的文件资源...例如,a@1.0.0 具有单个依赖项 b@1.0.0。 b@1.0.0 有一个 peer 依赖为 c@^1。...对于每个更改的包,按照拓扑顺序(所有依赖项在依赖关系之前): i. 通过JS API[29]发布包到配置的注册表[30]。 ii. 运行publish生命周期。 iii....add 向匹配的包添加依赖关系 前往[42] lerna clean 从所有包中删除node_modules目录 前往[43] lerna import 将一个包导入到带有提交历史记录的monorepo

    3.6K20

    如何使用 npm 执行本地安装 npm 包里的二进制文件

    通常,这些文件是以 .exe 或者没有扩展名的形式存在于操作系统中,例如 Unix 系统中的可执行脚本。这些文件能够直接运行,通常包含在某个软件包中,或是该软件包的一部分。...全局安装:当你使用 npm install -g package-name 命令时,这个包会被安装到你的全局 node_modules 目录中,并且它的二进制文件会被放置到全局 bin 目录中。...当你执行 npm install package-name(不带 -g 参数)时,包会被安装到当前项目的 node_modules 目录中,而对应的二进制文件会被放置到 node_modules/.bin...这在开发多个项目时非常重要,因为不同项目可能需要不同版本的同一包。版本一致性:通过本地安装,你可以确保团队中的所有成员使用相同版本的依赖包。这有助于避免由于依赖包版本不一致而导致的问题。...例如,当你在 GitHub Actions 或 Jenkins 中配置 CI 流水线时,可以通过执行 npm install 来安装所有依赖包,然后使用 npm run build 来构建项目。

    13310

    「React TS3 专题」从创建第一个 React TypeScript3 项目开始

    src mkdir dist 2、创建 package.json 文件 该 package.json 文件定义了我们的项目名称,描述,构建命令,依赖的 npm 模块等等。..."], "linterOptions": { "exclude": ["node_modules/**/*.ts"] } } 6、添加React相关依赖到项目中 通过以下命令将React...id=root的div中,所有的JS内容都会编译成一个bundle.js,存在dist文件夹中。...,我们就会运行如下命令,你就会发现 dist 文件夹里,多出来了一个 bundle.js 文件: npm run build bundle.js 会将用到的依赖项和我们的 react 组件代码都编译压缩成一个文件...今天的内容就到这里,我们学习了如何使用 create-react-app 和 手工的两种方式创建 React TypeScript3项目。

    2.2K10

    Deno会在短期内取代Node吗?

    基于Tokio平台(它提供了所有JavaScript所需的异步操作),内置V8和tsc引擎,可直接解释JavaScript和TypeScript。...放弃NPM和node_modules Deno决定完全放弃NPM和node_modules, 因为npm逻辑越来越复杂,node.js对外部模块几乎没有任何安全验证措施,另外node_modules也越来越臃肿且难以管理...也不再需要了,现在通过在名为deps.ts的文件中包含了模块列表及其各自的URL,简化了依赖管理。..."; export { green, bold } from "https://deno.land/std@v0.39.0/fmt/colors.ts"; 由于这个文件的存在,在内部运行时,依赖项将被重新导出...另外,虽然没有了node_modeules目录,但依赖项仍然会下载并隐藏在你的硬盘中,供你离线使用,如通过需要重新下载,只需在命令中添加—reload命令即可。 还有什么?

    80730

    了不起的 tsconfig.json 指南

    [封面.png] 在 TypeScript 开发中,tsconfig.json 是个不可或缺的配置文件,它是我们在 TS 项目中最常见的配置文件,那么你真的了解这个文件吗?它里面都有哪些优秀配置?...当入口文件依赖其他文件时,不需要将被依赖文件也指定到 files 中,因为编译器会自动将所有的依赖文件归纳为编译对象,即 index.ts 依赖 user.ts 时,不需要在 files 中指定 user.ts...默认包含当前目录和子目录下所有 TypeScript 文件。 { // ... // 把基础配置抽离成tsconfig.base.json文件,然后引入 "extends": "....默认包含当前目录和子目录下所有 TypeScript 文件。 { // ......文中通过一个简单 learnTsconfig 项目,让大家知道项目中如何使用 tsconfig.json 文件。在后续文章中,我们将这么多的配置项进行分类学习。

    2.7K42

    Angular10配置webpack打包 「详细教程」

    README.md 根应用的简介文档. angular.json 为工作区中的所有项目指定 CLI 的默认配置,包括 CLI 要用到的构建、启动开发服务器和测试工具的配置项,比如 TSLint,Karma...工作区范围的node_modules依赖关系对所有项目都可见。 tsconfig.json 工作空间中各个项目的默认 TypeScript 配置。...其子文件夹中包含应用源代码和应用的专属配置。 应用支持文件 目的 app/ 包含定义应用逻辑和数据的组件文件。 assets/ 包含要在构建应用时应该按原样复制的图像和其它静态资源文件。...端到端测试文件(基本用不到) 根级的 e2e/ 文件夹中包含一组针对根应用的端到端测试的源文件,以及测试专属的配置文件。...4.第三方库合并打包并重命名 有的时候,我们希望将所有来自 node_modules 的第三方库都打包到同一个文件中。显然,上面的打包配置并没有满足这个条件。

    5.1K20

    Angular的12个经典问题,看看你能答对几个?(文末附带Angular测试)

    在Angular2中,组件中发生的任何改变总是从当前组件传播到其所有子组件中。如果一个子组件的更改需要反映到其父组件的层次结构中,我们可以通过使用事件发射器api来发出事件。.../node_modules/codelyzer", "typescript.tsdk": "node_modules/typescript/lib" } 从cli中运行的代码:ng lint...如果我们需要扩展外部库的类型定义,一个好的做法是,我们并非对node_modules或现有的typings文件夹进行改动,而是创建一个命名为“自定义类型”的新文件夹,来存储所有的自定义类型。...要定义应用程序(JavaScript / Typescript)对象的类型,我们应该在应用程序相应模块的models文件夹中,定义接口和实体类。...缺点: 仅适用于HTML和CSS,其它文件类型需要前面的构建步骤 没有watch模式,必须手动完成(bin / ngc-watch.js)并编译所有文件 需要维护AOT版本的bootstrap文件(使用

    17.4K80

    将超过5000万行JS代码迁移到TypeScript,我们得到的10大见解

    如何指定依赖项的位置很重要 我们需要明确声明 TypeScript 依赖项的位置。...这是因为我们的 ES 模块系统不依赖“通过遍历一系列名为 node_modules 的目录来查找依赖项”的 Node 文件系统约定。...如今,TypeScript 尚不了解 package exports,因此不理解依赖项中的哪些文件被视为公共或私有的概念。...2、如果 TypeScript 对我们知道是私有的依赖项中的文件生成路径,则工具链会报错。当 TypeScript 意识到它正在生成一个依赖项的潜在危险路径时,也会报错,这两种错误很像。...生成的声明可以包含非必要依赖项 TypeScript 声明文件的消费者通常只关心包的公共类型 API。TypeScript 声明发射会为项目中的每个 TypeScript 文件恰好生成一个声明文件。

    1.7K30
    领券