为什么在用Typescript编写的node_module中发生语法错误?

时间:2018-12-04 08:24:37

标签: node.js typescript ecmascript-6 commonjs

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",所以我认为import关键字在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)

1 个答案:

答案 0 :(得分:1)

除非将项目配置为从node_modules来转译模块(通常不建议这样做,因为这样做效率低下且不需要),否则预计将按原样评估外部模块,而不会import关键字在CommonJS模块中允许。

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

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

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