diff --git a/docs/.vitepress/sidebar.ts b/docs/.vitepress/sidebar.ts index 9176e1e..b70c044 100644 --- a/docs/.vitepress/sidebar.ts +++ b/docs/.vitepress/sidebar.ts @@ -64,6 +64,10 @@ export default [ text: '前端工程化', link: '/Knowledge/Engineer', }, + { + text: '扫盲', + link: '/Knowledge/Literacy', + }, ], }, { diff --git a/docs/Knowledge/Debugger.md b/docs/Knowledge/Debugger.md index dfe04a3..f3a04a6 100644 --- a/docs/Knowledge/Debugger.md +++ b/docs/Knowledge/Debugger.md @@ -14,8 +14,17 @@ Android 使用 Charles 抓包 将线上 H5 里的资源代理到本地启动的服务上, 直接本地调试 +#### https 证书安装 + +android 端需要安装 CA 证书, 像华为从设置里搜索 证书 找到 CA 证书安装, 小米安装证书时, 凭据用途选择 vpn和应用, 且提示包含 CA 证书即可 + +如果安装了证书, 浏览器里仍然提示证书无效时跟浏览器有关系, 可以安装一个三方浏览器像 chrome, edge 来调试 + + + +#### WIFI 代理配置 + 我这里演示的是 ios 端的代理配置 -(android 端证书需要安装在系统目录下, 直接用设置里的证书安装是装在用户目录, 还是没法抓包和代理 https 请求) 1. 先将 WIFI 代理配置好 diff --git a/docs/Knowledge/Literacy.md b/docs/Knowledge/Literacy.md new file mode 100644 index 0000000..c4eff34 --- /dev/null +++ b/docs/Knowledge/Literacy.md @@ -0,0 +1,183 @@ +[[toc]] + +## 严格模式 + +严格模式是引入一些限制来提高代码安全性和可维护性 + +- 对于一些静默错误, 严格模式下会直接抛出错误 +- 严格模式修复了一些 Js 引擎难以执行优化的缺陷, 提升了性能 +- 严格模式禁用了新式语法 + +具体规则: + +- 禁止 + +## tsconfig.json + +```json +// 当前配置为默认值 +{ + // 相对路径或绝对路径的文件列表, 指定 tsc 编译器需要编译的文件列表 + "files": ["dir1/index.ts"], + + // 需要支持的文件列表, 支持 glob 通配符 + "include": ["dir2/**/*"], + + // 指定排除的文件列表, 但不能排除 files 直接指定的文件, 默认包含 node_modules + "exclude": ["dir2/index2.ts"], + + // 从另一个文件继承配置 + "extends": "", + + // 编译配置 + "compileOptions": { + "target": "es5", + + "jsx": "preserve", + // 指定生成目标为 react JSX 时使用的 JSX 工厂函数 + "jsxFactory": "React.createElement", + + // 是否生成 sourcemap 文件 + "sourcemap": false, + // 生成单个 sourcemap 文件, 需要开启 sourcemap 选项 + "inlineSourceMap": false, + + // 允许编译 js 文件 + "allowJs": false, + + // module === 'system' 或者设置了 esModuleInterop 且 module 不为 es2015/esnext + // 允许从没有设置默认导出的模块中默认导入, 不影响代码输出, 仅作为类型检查 + "allowSyntheticDefaultImports": false, + + // 不报告执行不到的代码错误 + "allowUnreachableCode": false, + + // 不报告未使用的标签错误 + "allowUnusedLabels": false, + + // 以严格模式解析, 并为每个源文件生成 "use strict" 语句 + "alwaysStrict": false, + + // 解析非相对模块名的基准目录 + "baseUrl": ".", + + // 输入文件的字符集 + "charset": "utf8", + + // 在 .js 文件中报告错误, 与 allowJs 配合使用 + "checkJs": false, + + // 生成相应的 .d.ts 文件 + "declaration": false, + + // 生成声明文件的输出路径 + "declarationDir": "", + + // 显示诊断信息 + "diagnostics": false, + + // 禁用 Js 工程体积大小的限制 + "disableSizeLimit": false, + + // 在输出文件的开头加入 BOM 头(UTF-8 Byte Order Mark), 用于标识文件编码格式 + "emitBOM": false, + + // 启用装饰器元数据的生成 + "emitDecoratorMetadata": false, + // 启用实验性的ES装饰器 + "experimentalDecorators": false, + + // 不生成输出文件 + "noEmit": false, + + // 报错时不生成输出文件 + "noEmitOnError": false, + + // 在表达式和声明上有隐含的 any 类型时报错 + "noImplicitAny": false, + + // 不是函数的所有返回路径都有返回值时报错 + "noImplicitReturns": false, + + // 当 this 表达式的值为 any 类型时, 生成错误 + "noImplicitThis": false, + + // 不包含默认的库文件(lib.d.ts) + "noLib": false, + + // 有未使用的局部变量则报错 + "noUnusedLocals": false, + + // 有未使用的参数则报错 + "noUnusedParameters": false, + + // 重定向输出目录, 不能和 outFile 同时使用 + "outDir": "dist", + + // 将输出文件合并为一个文件, 合并顺序根据传入编译器的文件顺序和 /// 和 import 的文件顺序决定 + "outFile": "", + + // 模块别名配置 + "paths": {}, + + // 是否保留 const 和 enum 声明, 用于优化输出或调试 + "preserveConstEnums": false, + + // 保留 watch 模式下过时的控制台输出 + "preserveWatchOutput": false, + + // 控制输出的目录结构, 例如: 当你的代码在 src 目录下, 输出会生成一层 src 目录, 将 rootDir 指定为 src 就可以去掉 + "rootDir": "", + + // 忽略所有声明文件(*.d.ts)的类型检查 + "skipLibCheck": false, + + // 禁用函数参数双向协变检查 + "strictFunctionTypes": false, + + // 确保类的非 undefined 属性已经在 构造函数里初始化, 需要同时启用 strictNullChecks + "strictPropertyInitialization": false, + // 在严格的 null 检查模式下, null 和 undefined 值不包含在任何类型里, 只允许用它们自己和 any 来赋值(undefined 可以 复制 void) + "strictNullChecks": false + } +} +``` + +### compileOptions + +- target + + 编译 Js 的版本, 默认为 ES3 + + - ES3: 最广泛支持的版本 + - ES5: 大多数现代浏览器支持 + - ES6/ES2015: 引入了类、模块、箭头函数、Promise等新特性 + - ES7/ES2016: 引入了 Array.prototype.includes 和幂运算符 + - ES8/ES2017: 引入了 async/await + - ES9/ES2018: 引入了异步迭代等特性 + - ES10/ES2019: 引入了 Array.prototype.flat 和 Object.fromEntries + - ES11/ES2020: 引入了可选链和空值合并运算符 + - ES12/ES2021: 引入了 Promise.any 和逻辑赋值运算符 + - ES13/ES2022: 引入了类字段和顶级 await + - ESNext: 编译为最新的 ECMAScript 版本, 包含所有新特性 + +- jsx + + 如何处理 JSX 语法 + + - preserve: 保留 JSX 语法, 不进行转换, 通常与 babel 等工具链结合使用 + - react: 将 JSX 转换为 React.createElement 调用 + - react-jsx: 将 JSX 转换为 新的 JSX 转换器(React 17 及以上版本引入), 不再需要显式导入 React + - react-jsxdev: 与 react-jsx 类似, 但用于开发模式, 提供额外的调试信息 + +- module + + 指定 TS 编译器生成的模块系统类型 + + - commonjs: 适用于 Node.js 环境 + - es6/es2015: 使用 ES6 模块语法 + - esnext: 与 es6 类似, 但允许使用最新的 es 模块特性 + - amd: 异步模块定义, 主要用于浏览器环境, 使用 define 和 require + - umd: 通用模块定义, 兼容 CommonJS 和 AMD, 适用于库的开发 + - system: 使用 SystemJS 模块加载器的模块格式 + - none: 不使用任何模块系统, 所有代码视为全局脚本 diff --git a/docs/Knowledge/index.md b/docs/Knowledge/index.md index 0b65197..4dff8f7 100644 --- a/docs/Knowledge/index.md +++ b/docs/Knowledge/index.md @@ -13,4 +13,5 @@ - [抽象思想](./Abstract.html) - [性能优化专题](./Performance.html) - [前端工程化](./Engineer.html) +- [扫盲](./Literacy.html) - [其他](./Other.html)