0

我正在尝试创建一个脚本来包装一些现有的 TypeScript 功能。例如,我的文件夹结构看起来像

./src/library.ts
./scripts/runner.ts

我有一个自定义 ts 配置文件:

{
  "compilerOptions": {
    "target": "ESNext",
    "module": "ESNext",
    "outDir": "./build",
    "importHelpers": false,
    "strict": false,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "moduleResolution": "node"
  },
  "exclude": ["test"]
}

脚本test.ts如下

import yargs from "yargs"
import library from "../src/library"

library(1);

库文件如下

const library = (c: number) => {
  console.log(2);
};

export default library;

我调用它如下

npx tsc --project tsconfig-scripts.json; node build/scripts/test.js

我收到以下错误

SyntaxError: Cannot use import statement outside a module

按照说明添加 "type": "module" 到 package.json 会出现以下错误。

internal/process/esm_loader.js:74
    internalBinding('errors').triggerUncaughtException(
                              ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/Users/gregreynolds/src/Development/orchestra-slackbot/build/src/library'

检查构建文件夹确实表明该模块确实位于预期的位置。

有没有办法运行这个脚本?我发现的例子都不是这个确切的用例。

4

1 回答 1

0

A colleague answered this for me. This TS Config file works if you do not have "type": "module" in package.json

{
  "compilerOptions": {
    "target": "ESNext",
    "module": "CommonJS",
    "outDir": "./build",
    "importHelpers": false,
    "strict": false,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "moduleResolution": "node"
  },
  "exclude": ["test"]
}
于 2021-08-24T10:04:17.987 回答