【问题标题】:How to simply import in Node? (Typescript version)如何在 Node 中简单地导入? (打字稿版本)
【发布时间】:2022-01-05 19:31:27
【问题描述】:

在 Node 中尝试最简单的导入,但我无法让它工作.... (根据网络上的建议添加了“名称”:“Foo”。)

package.json

{
  "type": "module",
  "name": "Foo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "author": "",
  "license": "ISC",
}

index.ts

import foo from './foo';
foo();

foo.ts

export default function foo() {
  console.log("FOO");
}

结果

import foo from './foo';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:1072:16)
    at Module._compile (internal/modules/cjs/loader.js:1122:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47

【问题讨论】:

  • 您是使用ts-node (npx ts-node ./index.ts) 还是node 运行脚本?
  • 你是如何让你的 TypeScript 在 Node 上运行的?你在转译吗?你在用 ts-node 吗?
  • @user3210641 $ 节点索引.ts
  • @Quentin $ node index.ts
  • @Oded — 这就是问题所在。 Node.js 不支持 TypeScript。

标签: javascript node.js typescript


【解决方案1】:

你应该在 package.json 中插入代码。

package.json:

{
  "name": "node",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "index.ts"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "type": "module"
}

index.js:

import foo from "./foo.js";

foo();

【讨论】:

  • 复制了您的答案 - (将文件名更改为 .js)并导致:node index.js internal/modules/cjs/loader.js:1174 throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath) ; ^ 错误 [ERR_REQUIRE_ESM]:必须使用导入来加载 ES 模块:/index.js at Object.Module._extensions..js (internal/modules/cjs/loader.js:1174:13) at Module.load (internal/modules /cjs/loader.js:1002:32) 在 Function.Module._load (internal/modules/cjs/loader.js:901:1...(internal/modules/run_main.js:74:12) 在内部/ main/run_main_module.js:18:47 { 代码:'ERR_REQUIRE_ESM' }
  • 你应该把 foo.ts 改成 foo.js。
  • 完成,无法运行您的版本。你能让它工作吗?
  • 是的。你能把你的连接发给我吗?
  • 好的。我会为你做回购。
【解决方案2】:

package.json 中删除type: "module" 行,看看是否有帮助。那是因为该行激活了 Node.js 的 ES6 模块,而您正在尝试使用 commonJS 模块,它们不能很好地协同工作。

【讨论】:

  • 同样的坏结果。你能让你的解决方案发挥作用吗?从 './foo' 导入 foo; ^^^^^^ SyntaxError: 不能在模块外使用 import 语句
  • 你把你的 typescript 文件编译成 javascript 了吗?
  • @Schwieriiiiig。没有,我在做同样的香草 JS 时遇到了类似的问题。
  • 那么 1. 使用 tsc 将您的 typescript 源代码编译为带有适当 tsconfig.json (tsc --init) 的 javscript,然后再次运行您的文件
猜你喜欢
  • 2019-04-23
  • 2021-05-08
  • 2021-08-20
  • 2016-09-23
  • 1970-01-01
  • 2023-02-18
  • 1970-01-01
  • 2022-07-28
  • 2017-07-31
相关资源
最近更新 更多