首页 > 解决方案 > 为什么 Typescript 编写的 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 文件中会很好地工作。

正如我所料,import 关键字 insrc/index.ts运行良好,但 export 关键字 innode_modules/my_module/index.ts是一个意外的标记。我怎样才能解决这个问题?

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.jstypescriptecmascript-6commonjs

解决方案


除非项目被配置为转换模块node_modules(通常不鼓励这样做,因为这效率低且不需要),否则外部模块将按原样进行评估,并且importCommonJS 模块中不允许使用关键字。

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

mainmy_modulepackage.json 中应该指定入口点,"main": "dist/index.js".

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


推荐阅读