node.js - Varför uppstår syntaxfel i en node_module som är skriven i Typescript?


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

Jag skapade en anpassad modul my_module och ville använda den som ett externt bibliotek. Koderna är som nedan:

[src/index.ts]

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

[node_modules/min_modul/index.ts]

export const hello = "Hello"

Min tsconfig.json säger "module": "commonjs", "target": "es6", så jag trodde att importnyckelord skulle fungera bra i Typescript-filer.

Som jag förväntade mig fungerar import-nyckelordet i src/index.ts bra, men export-nyckelordet i node_modules/my_module/index.ts är en oväntad token. Hur kan jag få detta problem löst?

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)

Svar #1

Om inte projektet var konfigurerat för att transpile moduler från node_modules (detta avråds generellt eftersom det är ineffektivt och onödigt), förväntas det att externa moduler kommer att utvärderas som de är, och import-nyckelordet är inte tillåtet i CommonJS-moduler.

my_module bör kompileras innan publicering, dvs. tsc bör köras, och dist bör innehålla transpilerade *.js- och *.d.ts-typer.

main i my_module package.json bör ange ingångspunkt, "main": "dist/index.js".

Paketet kan valfritt innehålla en .npmrc-fil för att utesluta src från publicerade filer, men detta är inte nödvändigt.