如何修复“SyntaxError:Cannot use import statement outside a module”错误?

4

我对这些都很陌生,但我正在尝试将Node + Typescript后端添加到我的Angular项目中。 但是在导入express后,我总是遇到错误。

[ERROR] SyntaxError: Cannot use import statement outside a module.

package.json

{
  "name": "server",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "serve": "ts-node-dev server.ts",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@types/express": "^4.17.11",
    "express": "^4.17.1",
    "ts-node": "^9.1.1",
    "ts-node-dev": "^1.1.6",
    "tslint": "^6.1.3",
    "typescript": "^4.2.4"
  },
}

tsconfig.json

{
  "compilerOptions": {
    "target": "ESNEXT",                                
    "module": "commonjs", 
    "strict": false, 
    "esModuleInterop": true, 
    "skipLibCheck": true,                          
    "forceConsistentCasingInFileNames": true        
  }
}   

server.ts

import * as express from 'express';

const app = express();

app.listen(4201, '127.0.0.', function() {
  console.log('Server is listening on port 4201');
});

我翻阅了相关资料,最常见的解决方案是在 package.json 中添加 "type": "module"。我已经这样做了。我也知道这只适用于 Node 13 及以上版本,并且我的版本是 Node: 14.15.5。

1个回答

7
使用require()是导入Node模块的最佳实践。您可以使用require()函数导入内置的核心Node模块、npm模块以及本地模块。在您的情况下,请使用const express = require("express")而不是import * as express from 'express',并从package.json中删除"type":"module"。如果这对您有用,请告诉我。

谢谢,它起作用了。虽然我之前尝试过类似的东西,但可能之前犯了错误。 - Judita
不用客气。下次记得使用 require 导入模块。 - Roshan Kanwar
抱歉再次打扰你,但我应该如何正确导出? export {app as routes}; 这可能是错误的,就像我的导入一样。 - Judita
1
再次问候,没问题,我随时乐意帮忙。要导出,您必须使用 module.exports。例如,假设您有一个像这样的函数 const func = () => console.log('hello world') 在 file.js 文件中。所以你所要做的就是 module.exports = func 然后再使用 require() 在任何地方导入它。如果您有多个函数或对象在一个文件中,那么您可以这样做 module.exports={ function1, object1 }。如果您需要更多的澄清,请告诉我。您也可以参考此链接 - Roshan Kanwar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接