【制作npm包3】了解 tsconfig.json 相关配置

这篇具有很好参考价值的文章主要介绍了【制作npm包3】了解 tsconfig.json 相关配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

制作npm包目录

本文是系列文章, 作者一个橙子pro,本系列文章大纲如下。转载或者商业修改必须注明文章出处

一、申请npm账号、个人包和组织包区别
二、了解 package.json 相关配置
三、 了解 tsconfig.json 相关配置
四、 api-extractor 学习
五、npm包制作完整教程,我的第一个npm包


在最早的typescript官方表述当中说,typescript1是一个JavaScript超集,当时有一些代替JavaScript的內味在里面,并且发布了像接口、枚举这些JavaScript不存在的类型。但是随着时间的推移,这个表述发生了变化,typescript是一个JavaScript类型标注语言。可以看得出,typescript对于自己的定位是类型推断,而不是替代JavaScript

常见的文件末尾.d.ts结尾的文件,我们的代码工具会识别他是一个typescript类型文件。而项目根目录存在tsconfig.json则表示他是一个可以支持typescript的项目。对于编译器和编辑器而言,正是因为这个文件的存在,它们才能识别这是一个ts项目,并且给与完整的typescript语法识别。事实上,在项目根目录创建jsconfig.json,同样获得大部分ts开发上的一些体验。

一个例子

本示例完整代码发布在这里:https://github.com/vue3plugin/npm-pkg-by-vite,有devmain两个分支提供参考。

对于这个例子而言,可能好多配置没有,同样下面示例涉及的配置我也不会逐个介绍,只介绍一些特别常用到的,完整配置参见2。由于打包工具的存在,我们的ts通常只用于开发阶段的类型检查,以及对外输出的类型文件。对于它打包ts代码的能力,我们通常直接使用打包工具代替了。

文件tsconfig.json

{
  "compilerOptions": {
      "target": "ESNext", 
      "module": "ESNext",
      "lib": [
        "ESNext",
        "DOM",
        "DOM.Iterable",
      ], 
      "moduleResolution": "Bundler", 
      "sourceMap": true,  
      "skipLibCheck": true,
      "inlineSources": false,
      "allowUnreachableCode": false,
      "allowUnusedLabels": false,
      "emitDecoratorMetadata": true,
      "experimentalDecorators": true,
      "allowSyntheticDefaultImports": true,
      "removeComments": true,
      "alwaysStrict": true,
      "noImplicitUseStrict": false,
      "strictBindCallApply": true,
      "strictFunctionTypes": true,
      "strictPropertyInitialization": false,
      "strictNullChecks": false,
      "forceConsistentCasingInFileNames": true,
      "checkJs": false,
      "allowJs": true,
      "esModuleInterop": true,
      "importHelpers": false
  },
  "include": ["./src/**/*", "env.d.ts", ],
  "exclude": ["node_modules/**/*"]
}

对于每一个typescript版本而言,配置上多是增加或减少了一些配置项,其余或是一些typescript类型推断的新支持,大多数常见的配置,还是不变的。

compilerOptions 选项,中文名编译器选项

target

这个设置是表示typescript在打包编译的时候,编译的目标版本。例如这个值是ES5,则ts编译之后会是ES5的代码。实际上在真正的工程当中我们用不到他,无论是webpackrollupvite 编译目标ts的时候,会直接借用插件移除ts相关类型,经过自己加工,根据打包工具的内置方法去做一些编译目标。目前大多借用core.js这个polyfill仓库去做一些代码降级,例如把ES6降级为ES5

module

当前编辑器内写代码所使用的代码规范,还有好多AMDCommonJS等其他规范,目前一致推崇的是ES相关的语法,我可能比较激进,直接ESNext,以便于体验最新的ES语法

lib

这个就比较更加常用了,我们在写ts代码的时候,通常会有若干原生代码的提示。我们写constlet这些声明,或者一个for...of...语法的提示,这些都来自这里的设置。这个参数的值是一个数组,像上边的例子ESNext表示导入可ES相关语法,DOM表示导入了浏览器一些相关的Api,例如常见的documentwindow等。我们开发vue这种web项目的时候,这两个都是必选的。不过通常脚手架都已经帮我们设置好了。

moduleResolution

这个表示模块解析策略,这个值大白话使用node的解析方式,区别在于使用的是哪个版本的node

classic 仅在ts 1.6版本之前使用,当前可以完全被忽略

node10表示一个旧的版本,只可以使用CommonJS的语法

node16nodeNext:由于node12+的版本早已同时支持 ECMAScript 导入和 CommonJS ,当他的值是node16nodeNext时,我们大可以在代码当中同时使用两种语法,import ... from ... 或者 require('xxx')

bundler:bundlernode16nodeNext是相似的配置,这个值我在5.1.6版本看到,大致是个新的配置,这个配置项在任何时候不需要文件后缀名的声明。

当然这个配置是有坑在里面的,我们知道,package.json有个type的参数,详见【制作npm包2】了解 package.json 相关配置 里面的介绍。当我们设置值为module时,实际上我们的代码是就不会支持require的导入,尤其是我们在使用诸如viterollup这类只支持es的打包方式,尽管typescript语法上支持是没有用的。

checkJs

表示当前支持js文件的类型检查

allowJs

允许代码当中出现js代码的导入

noImplicitAny

代码当中对于无法推断的配置项,将用any类型替代。

suppressImplicitAnyIndexErrors

禁止在索引到对象时报告有关隐式 any 的错误,一个对象使用索引的方式去取值,在默认ts配置当中是不允许的。实际上,这个配置也不是建议的。

例如:

const obj = { name :  '一个橙子pro' }
// Element implicitly has an 'any' type because expression of type '"obj "' can't be used to index type '{ name : string; }'.
obj['name'] // 当开启 suppressImplicitAnyIndexErrors 配置,才可以这样取值

obj.a //正确的写法

对于开启noImplicitAny来说,suppressImplicitAnyIndexErrors这个配置也就默认开启了。一般而言,不开启这些有些反类型的开关,对后期代码维护更加友好一些。

include

表示ts项目包含哪些目录,只有当前目录都包含在这个选项当中,我们的代码提示才会生效。

包含一些通配符的语法:

  • * 匹配零个或多个字符(不包括目录分隔符)
  • ? 匹配任何一个字符(不包括目录分隔符)
  • **/ 匹配嵌套到任何级别的任何目录

exclude

表示ts项目需要排除哪些目录,一般排除node_modules就行,通配符语法和include完全相同。


下面是介绍一些和类型打包有关的配置,简略介绍了。一般打包的时候,我们会专门写一个打包类型的文件。

文件tsconfig.types.json

{
    "extends": "./tsconfig.json",
    "compilerOptions": {
        "declaration": true, /* 生成相关的 '.d.ts' 文件。 */
        "declarationDir": "./dist/types", /* '.d.ts' 文件输出目录 */
        "emitDeclarationOnly": true, /* 只生成声明文件,不生成 js 文件*/
        "rootDir": "./src", /* 指定需要编译的文件目录(用于输出),用于控制输出目录结构 */
    },
    "include": [
        "src"
    ],
}

emitDeclarationOnly这个配置项设置为true,正好接应上边的描述,我们的ts配置只进行代码提示,以及类型文件打包的工作。
由于大多数配置和上面相同,这里用到了extends这个参数,extends字如其名,表示继承一个ts的配置文件。


  1. typeScript 英文文档, 中文文档 ↩︎

  2. https://ts.nodejs.cn/tsconfig ↩︎文章来源地址https://www.toymoban.com/news/detail-656438.html

到了这里,关于【制作npm包3】了解 tsconfig.json 相关配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【TypeScript】tsconfig.json 配置文件

    该文件由 tsc --init 命令生成 tsconfig.json

    2024年02月11日
    浏览(36)
  • vue项目的Husky、env、editorconfig、eslintrc、tsconfig.json配置文件小聊

    1、 Husky Husky 是一款管理 git hooks 的工具,可以帮助我们触发 git 提交的各个阶段: pre-commit、commit-msg、pre-push , 有助于我们在项目开发中的git规范和团队协作。 .husky 文件通常包含以下内容: pre-commit :在提交代码前运行的脚本,可以用于代码格式化、代码检查等操作; pr

    2024年04月28日
    浏览(22)
  • tsconfig.json参数详解

    tsconfig.json是ts编译器的配置文件,ts编译器可以根据他的信息来对代码进行编译。  想要学习这篇文章小伙伴,可以先去看看下面文章,可以明白tsconfig.json的由来以及如何编译: 在vscode中使用Typescript并运行_typescript vscode插件_suoh\\\'s Blog的博客-CSDN博客 下面开始讲解常用的配置

    2024年02月21日
    浏览(29)
  • Cannot find base config file @vue/tsconfig/tsconfig.web.json

    vue升级到最新版本,node18 会出现warning 参考issues Cannot find base config file @vue/tsconfig/tsconfig.web.json

    2024年02月12日
    浏览(32)
  • 【TypeScript】tsconfig.json文件到底是干啥的?作用是什么?

    参考学习博文: 掌握tsconfig.json 一、tsconfig.json简介 1、tsconfig.json是什么? TypeScript 使用 tsconfig.json 文件作为其 配置文件 ,当一个目录中存在 tsconfig.json 文件,则认为该目录为 TypeScript 项目的 根目录 。 通常 tsconfig.json 文件主要包含两部分内容: 指定待编译文件 定义编译选

    2024年02月01日
    浏览(35)
  • 解决Vscode报错 [Vetur can‘t find ‘tsconfig.json‘ or ‘jsconfig.json‘]

    翻译一下报错信息,\\\" Vetur找不到tsconfig.json文件或者jsconfig.json文件\\\". 首先Vetur只会扫描项目的根目录下的jsconfig或者tsconfig,如果没有这两个文件之一,就会报错. 如果你是通过vue-cli创建的vue项目,默认都会有jsconfig或者tsconfig,那问题极有可能是打开项目文件夹的时候路径不对: 以下

    2024年03月15日
    浏览(28)
  • npm详解:掌握package.json配置

    package.json  文件中的  scripts  配置允许你定义一系列脚本命令,这些命令可以通过  npm run script-name  来执行。下面是一些常见的  scripts  配置,以及它们的详解和举例。 start         这是最常用的脚本,通常用于启动应用程序的开发服务器。 执行  npm start  将运行 

    2024年02月22日
    浏览(34)
  • 解决vscode中导入的vue项目tsconfig.json文件首行标红问题

    vscode中导入的vue项目 tsconfig.json文件标红,文件中第一行 { 处标红 项目中自定义的tsconfig.json文件与vscode本身会自动进行 JavaScript 的语义检查发生冲突,而tsconfig.json文件无法覆盖vscode本身的javascript检查,故标红 让项目自定义的tsconfig.json文件覆盖vscode自带的javascript语义检查

    2024年01月19日
    浏览(34)
  • vscode中vue3+ts报类型“{ }“上不存在属性“ “,以及ts.config.app.json和tsconfig.node.json中报错(彻底解决)

    亲爱的小伙伴们,你们是否遇到过使用vscode打开vue3+ts项目时一片爆红,一直提示类型\\\"{}\\\"上不存在属性 \\\"\\\",以及ts.config.app.json和tsconfig.node.json中报“在没有\\\"node\\\"模块解析策略的情况下,无法指定选项\\\"-resolveJsonModule”的问题,不要担心,不要着急,看了很多篇的博客,我终于是

    2024年02月13日
    浏览(23)
  • message: 没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 `miniprogramRoot` 目录内,或配置 project.config.json 的 packNpmMa

    问题 :message: 没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 miniprogramRoot 目录内,或配置 project.config.json 的 packNpmManually 和 packNpmRelationList 进行构建; 描述 :这是一个使用 TypeScript+Less 的小程序项目模板,并且该模板安装了 lin-ui 作为UI组件库,安装完毕后使用

    2024年02月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包