【问题标题】:Why does syntax error occurs in a Typescript-written node_module?为什么 Typescript 编写的 node_module 会出现语法错误?
【发布时间】:2019-05-05 14:51:36
【问题描述】:
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)

【问题讨论】:

  • 预计在发布前将外部模块转译为JS。这至少在使用时节省了一些资源。
  • @estus 谢谢。有什么办法可以禁用自动转译?
  • 什么意思?问题是my_module 中的index.ts 没有被转译。导入包时应该是dist/import.js
  • @estus 这就是我想说的。我希望我的每一个代码都用 Typescript 编写,甚至是自定义外部库。大多数关于使用 Typescript 编写节点模块的博客文章都推荐使用 tsc 并将转译的代码转换为 dist/,但我想让我的库像 tsutils(github.com/ajafff/tsutils)。这个库的主要代码是用 Typescript 编写的。它似乎没有转译 JavaScript 代码
  • tsutils 被转译。您可以安装它并检查它是否包含 index.js。

标签: node.js typescript ecmascript-6 commonjs


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢。在您上传答案之前,我已经决定这样做:)
  • 很高兴你解决了这个问题。
猜你喜欢
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 2016-12-21
  • 1970-01-01
  • 2011-04-17
  • 2016-06-21
  • 2022-08-03
相关资源
最近更新 更多