为什么用Typescript写的node_module会出现语法错误?

Why does syntax error occurs in a Typescript-written node_module?

node_modules/
  my_module/
    lib/
      index.ts
src/
  index.ts

我制作了一个自定义模块 my_module 并想将其用作外部库。代码如下:

[src/index.ts]

import { hello } from 'my_module'
console.log(hello)

[node_modules/my_module/index.ts]

export const hello = "Hello"

我的 tsconfig.json"module": "commonjs", "target": "es6",所以我认为导入关键字在 Typescript 文件中会很好地工作。

正如我所料,src/index.ts 中的 import 关键字工作正常,但 node_modules/my_module/index.ts 中的 export 关键字是一个意外的标记。我怎样才能解决这个问题?

export const hello = "hello"
^^^^^^

SyntaxError: Unexpected token export
    at new Script (vm.js:83:7)
    at createScript (vm.js:267:10)
    at Object.runInThisContext (vm.js:319:10)
    at Module._compile (internal/modules/cjs/loader.js:685:28)
    at Module._extensions..js (internal/modules/cjs/loader.js:733:10)
    at Object.require.extensions.(anonymous function) [as .ts] (/usr/local/lib/node_modules/ts-node/src/index.ts:431:14)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
    at Module.require (internal/modules/cjs/loader.js:658:17)

除非项目被配置为从 node_modules 转译模块(通常不鼓励这样做,因为这是低效且不需要的),预计外部模块将按原样评估,并且 import 关键字在 CommonJS 模块中是不允许的。

my_module 应该在发布之前编译,即 tsc 应该被执行,并且 dist 应该包含转译的 *.js 和 *.d.ts 类型。

mainmy_module package.json 应指定入口点,"main": "dist/index.js".

该包可以选择包含 .npmrc file 以从已发布的文件中排除 src,但这不是必需的。