TypeScript 2.3.1 在 SystemJS plunk 中的重大变化
TypeScript 2.3.1 breaking changes in SystemJS plunk
这里 official Angular + TypeScript plunk 使用 SystemJS 0.19.31 并已更改为使用 TypeScript 2.3.0。
当SystemJS配置相同时is changed to TypeScript 2.3.1 or 2.3.2
'typescript': 'npm:typescript@2.3.1/lib/typescript.js'
它只是停止工作。控制台中没有错误。
TypeScript 2.3.1 有什么问题?这是一个已知问题吗?问题是否特定于当前设置?
这是 SystemJS 模块格式自动检测的问题。
它有这个正则表达式来检查源是否是 es6 并且需要转译:
// good enough ES6 module detection regex - format detections not designed to be accurate, but to handle the 99% use case
var esmRegEx = /(^\s*|[}\);\n]\s*)(import\s*(['"]|(\*\s+as\s+)?[^"'\(\)\n;]+\s*from\s*['"]|\{)|export\s+\*\s+from\s+["']|export\s*(\{|default|function|class|var|const|let|async\s+function))/;
果然,TypeScript 2.3.1 和 2.3.2 在源代码中有与正则表达式匹配的注释:
// For an export of a module, we may be in a declaration file, and it may be accessed elsewhere. E.g.:
// declare module "a" { export type T = number; }
// declare module "b" { import { T } from "a"; export const x: T; }
因此,在调试时,您可以看到 SystemJS 加载了一个转译器 (typescript),确定它是 es6 并且需要转译,加载一个转译器,...,并且永远不会转译您的代码 (main.ts
)
typescript 的正确格式是 'global',因此将其添加到顶层的 SystemJS 配置中应该可以修复它:
meta: {typescript: {format: 'global'}}
这里 official Angular + TypeScript plunk 使用 SystemJS 0.19.31 并已更改为使用 TypeScript 2.3.0。
当SystemJS配置相同时is changed to TypeScript 2.3.1 or 2.3.2
'typescript': 'npm:typescript@2.3.1/lib/typescript.js'
它只是停止工作。控制台中没有错误。
TypeScript 2.3.1 有什么问题?这是一个已知问题吗?问题是否特定于当前设置?
这是 SystemJS 模块格式自动检测的问题。
它有这个正则表达式来检查源是否是 es6 并且需要转译:
// good enough ES6 module detection regex - format detections not designed to be accurate, but to handle the 99% use case
var esmRegEx = /(^\s*|[}\);\n]\s*)(import\s*(['"]|(\*\s+as\s+)?[^"'\(\)\n;]+\s*from\s*['"]|\{)|export\s+\*\s+from\s+["']|export\s*(\{|default|function|class|var|const|let|async\s+function))/;
果然,TypeScript 2.3.1 和 2.3.2 在源代码中有与正则表达式匹配的注释:
// For an export of a module, we may be in a declaration file, and it may be accessed elsewhere. E.g.:
// declare module "a" { export type T = number; }
// declare module "b" { import { T } from "a"; export const x: T; }
因此,在调试时,您可以看到 SystemJS 加载了一个转译器 (typescript),确定它是 es6 并且需要转译,加载一个转译器,...,并且永远不会转译您的代码 (main.ts
)
typescript 的正确格式是 'global',因此将其添加到顶层的 SystemJS 配置中应该可以修复它:
meta: {typescript: {format: 'global'}}