工程化

既将SSR(服务器端渲染)打包为前后端分离的代码
image.png
image.png

答案

A B C

解析

前端工程化在前端开发中扮演着重要的角色,是团队开发中必不可少的东西。

  • 通过流程规范化、标准化等提升团队协作效率。
  • 通过组件化、模块化开发等提升代码质量。
  • 使用构建工具、自动化工具等提升开发效率。

所以正确答案为 A B C。

tsc 编译

ts 编译选项 https://www.tslang.cn/docs/handbook/compiler-options.html
常见的选项

选项 类型 默认值 描述
—allowJs boolean false 允许编译javascript文件。
—checkJs boolean false 在 .js文件中报告错误。与 —allowJs配合使用。
—declaration
-d
boolean false 生成相应的 .d.ts文件。
—jsx string “Preserve” 在 .tsx文件里支持JSX: “React”或 “Preserve”。查看 JSX
—lib string[]
编译过程中需要引入的库文件的列表。
可能的值为:
► ES5
► ES6
► ES2015
► ES7
► ES2016
► ES2017
► ES2018
► ESNext
► DOM
► DOM.Iterable
► WebWorker
► ScriptHost
► ES2015.Core
► ES2015.Collection
► ES2015.Generator
► ES2015.Iterable
► ES2015.Promise
► ES2015.Proxy
► ES2015.Reflect
► ES2015.Symbol
► ES2015.Symbol.WellKnown
► ES2016.Array.Include
► ES2017.object
► ES2017.Intl
► ES2017.SharedMemory
► ES2017.String
► ES2017.TypedArrays
► ES2018.Intl
► ES2018.Promise
► ES2018.RegExp
► ESNext.AsyncIterable
► ESNext.Array
► ESNext.Intl
► ESNext.Symbol

注意:如果—lib没有指定默认注入的库的列表。默认注入的库为:
► 针对于—target ES5:DOM,ES5,ScriptHost
► 针对于—target ES6:DOM,ES6,DOM.Iterable,ScriptHost | | —module
-m | string | target === “ES6” ? “ES6” : “commonjs” | 指定生成哪个模块系统代码: “None”, “CommonJS(通常使用这个)”, “AMD”, “System”, “UMD”, “ES6”或 “ES2015”。
► 只有 “AMD”和 “System”能和 —outFile一起使用。
► “ES6”和 “ES2015”可使用在目标输出为 “ES5”或更低的情况下。 | | —outDir | string |
| 重定向输出目录。 | | —strict | boolean | false | (建议开启)
启用所有严格类型检查选项。
启用 —strict相当于启用 —noImplicitAny, —noImplicitThis, —alwaysStrict, —strictNullChecks和 —strictFunctionTypes和—strictPropertyInitialization。 | | —target
-t | string | “ES3” | 指定ECMAScript目标版本 “ES3”(默认), “ES5”, “ES6”/ “ES2015”, “ES2016”, “ES2017”或 “ESNext”。

注意: “ESNext”最新的生成目标列表为 ES proposed features | | —watch
-w |
|
| 在监视模式下运行编译器。会监视输出文件,在它们改变时重新编译。监视文件和目录的具体实现可以通过环境变量进行配置。详情请看配置 Watch。 |

image.png
image.png

答案

正确

解析

tsc是 TS编译器 提供的编译命令。使用 tsc 命令可以将 ts 文件编译为 js 文件。
tsc 命令可以接收一个编译选项文件 tsconfig.json。该文件可以设置一系列编译规则,TS编译器 会根据这些编译规则生成相应的 js 文件。

tsconfig.json 常用配置

输出路径在 compilerOptions 的 outDir 指定
sourceMap 代表生成文件的 sourceMap (.map), 既生成一个 *.js.map文件
image.pngimage.png

答案

C

解析

在 tsconfig.json 中:

  • compilerOptions 用于指定编译选项。其中 experimentalDecorators 的含义是启用实验性的ES装饰器。
  • include 指定编译包含的文件。
  • exclude 编译时需要排除的文件。

更多明细请查阅 files、include、exclude 的区别。
所以正确答案为 C。
image.png

npm scripts

package.json 中的 scripts 字段添加命令
通过 —watch 监控文件更改
image.pngimage.png

答案

A B C D

解析

npm 可以在 package.json 文件里面定义脚本文件,如下:

  1. {
  2. "scripts": {
  3. "build": "node build.js"
  4. },
  5. ...
  6. }
  • 脚本不一定是 node.js 脚本,符合 shell 脚本规范即可。
  • 使用 npm run <command> 执行脚本命令。
  • npm run start 可以简写为 npm start

所以 A B C D 都是正确的。

webpack

image.png
entry/output定义输入输出
其他的定义需要打包的后缀文件和一些打包配置
module的rules 则匹配如果有正则内的.ts / .tsx 文件则使用awesome进行加载并变为JS
编译完ts后,webpack再打包
image.png

const path = require('path')
const { CheckerPlugin } = require('awesome-typescript-loader')

module.exports = {
  entry: './src/index.ts',
  output: {
    path: path.resolve(__dirname, 'public'),
    filename: 'bundle.js',
  },
  mode: 'development',
  resolve: {
    extensions: ['.ts', '.tsx', '.js', '.jsx'],
  },
  devtool: 'source-map',
  watch: true,
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        loader: 'awesome-typescript-loader',
      }
    ]
  },
  plugins: [
    new CheckerPlugin()
  ]
}

// 注意: 需要安装awesome-typescript-loader, typescript, webpack, webpack-cli

image.png

答案

A B

解析

webpack 本身只能处理 JavaScript 模块,如果要处理其它模块的文件需要借助 loader。
目前处理 TypeScript 的 loader 共有两个

  • ts-loader
  • awesome-typescript-loader

更多区别详见这里