【问题标题】:Run glob command in TypeScript (TS-Node)在 TypeScript (TS-Node) 中运行 glob 命令
【发布时间】:2020-12-08 16:04:16
【问题描述】:

几个月前,我问过how to feed a glob into a Node pattern。我想在RITEway 中运行测试,解决方案是使用riteway 而不是node 运行命令。

"test": "NODE_ENV=test riteway -r @babel/register 'src/**/*.test.js'",

现在我将项目转换为 TypeScript。运行上面的命令(将.js改为.ts后),抛出如下错误:

$ NODE_ENV=test riteway -r @babel/register 'src/tests/**/*.test.ts' | tap-nirvana
/Users/user/my-proj/src/tests/fn.test.ts:1
import { describe } from 'riteway';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:979:16)
    at Module._compile (internal/modules/cjs/loader.js:1027:27)
    at Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Object.newLoader [as .js] (/Users/user/my-proj/node_modules/pirates/lib/index.js:104:7)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at /Users/user/my-proj/node_modules/riteway/bin/riteway:54:5
    at Array.forEach (<anonymous>)

谷歌搜索后,我想我必须使用ts-node,但该命令与仅运行node有相同的问题。

yarn run v1.22.10
$ NODE_ENV=test ts-node -r @babel/register 'src/tests/**/*.test.ts' | tap-nirvana
Error: Cannot find module '/Users/user/my-project/src/tests/**/*.test.ts'

如何将命令提供给 RITEway,但使其与 TypeScript 一起使用?

{
  "compilerOptions": {
    "allowJs": true,
    "baseUrl": "./src",
    "esModuleInterop": true,
    "forceConsistentCasingInFileNames": true,
    "isolatedModules": true,
    "jsx": "preserve",
    "lib": ["dom", "dom.iterable", "esnext"],
    "module": "esnext",
    "moduleResolution": "node",
    "noEmit": true,
    "resolveJsonModule": true,
    "skipLibCheck": true,
    "strict": true,
    "target": "es5"
  },
  "exclude": ["node_modules"],
  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"]
}

【问题讨论】:

  • 你能把你的tsconfig也发一下吗?
  • @Titulum 完成! :)
  • 你能给我你的typepackage.json

标签: node.js typescript glob ts-node


【解决方案1】:

您可以通过在您的riteway 命令中注册ts-node/register/transpile-only 来运行转译的打字稿:

"test": "NODE_ENV=test  riteway -r ts-node/register/transpile-only 'src/**/*.test.ts'",

还要确保tsconfig 中的module 选项设置为commonjs:

{
    "compilerOptions": {
        "allowJs": true,
        "baseUrl": "./src",
        "esModuleInterop": true,
        "forceConsistentCasingInFileNames": true,
        "isolatedModules": true,
        "jsx": "preserve",
        "lib": [
            "dom",
            "dom.iterable",
            "esnext"
        ],
        "module": "commonjs",
        "moduleResolution": "node",
        "noEmit": true,
        "resolveJsonModule": true,
        "skipLibCheck": true,
        "strict": true,
        "target": "es6"
    },
    "exclude": [
        "node_modules"
    ],
    "include": [
        "next-env.d.ts",
        "**/*.ts",
        "**/*.tsx"
    ]
}

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 2022-08-02
    • 1970-01-01
    • 2020-03-06
    • 2021-08-31
    • 2015-01-11
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    相关资源
    最近更新 更多