打字稿:使用ts-node-dev导入表达意外的Idenfitier

时间:2019-05-25 18:26:13

标签: node.js typescript express ts-node

我正在使用Typescript开始一个新项目,并且我想使用typescript使用express创建节点服务器。我一直在关注有关如何运行Typescript文件而不必在以下链接中编译文件的教程:https://medium.com/javascript-in-plain-english/typescript-with-node-and-express-js-why-when-and-how-eb6bc73edd5d

我现在面临的问题是,在执行运行ts-node-dev的脚本时,它会引发错误:

> vidursyn@0.0.0 server:start /home/oscar/Documents/vidursyn
> ts-node-dev --respawn --transpileOnly ./src/server/app.ts

Using ts-node version 7.0.1, typescript version 3.2.4
/home/oscar/Documents/vidursyn/src/server/app.ts:1
(function (exports, require, module, __filename, __dirname) { import express from "express";
                                                                     ^^^^^^^

SyntaxError: Unexpected identifier
    at new Script (vm.js:80:7)
    at createScript (vm.js:274:10)
    at Object.runInThisContext (vm.js:326:10)
    at Object.obj.(anonymous function) [as runInThisContext] (/home/oscar/Documents/vidursyn/node_modules/ts-node-dev/lib/hook.js:30:19)
    at Module._compile (internal/modules/cjs/loader.js:664:28)
    at Module._compile (/home/oscar/Documents/vidursyn/node_modules/source-map-support/source-map-support.js:517:25)
    at Module.m._compile (/tmp/ts-node-dev-hook-9240179406846312.js:56:25)
    at Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at require.extensions.(anonymous function) (/tmp/ts-node-dev-hook-9240179406846312.js:58:14)
    at Object.nodeDevHook [as .ts] (/home/oscar/Documents/vidursyn/node_modules/ts-node-dev/lib/hook.js:61:7)
[ERROR] 13:18:43 SyntaxError: Unexpected identifier

文件的内容太简单了,就像这样:

import express         from "express";
import { environment } from "../../lib/environment";
import * as config     from "../../config.json";

const configServer = config[environment].server;
const app = express();

app.get("/", (request: express.Request, response: express.Response) => {
  response.end("Hello World");
});

app.listen(configServer.port, () => {
  console.log(`Server listening at port ${configServer.port}`);
});

我搜索了互联网上的stackoverflow和其他一些文章,他们都建议在命令中添加--module-experimental作为标志,但是即使带有该标志,它仍然会引发相同的错误,这就是为什么我正在提出这个问题。

以防万一tsconfig.json的样子:

{
  "compileOnSave": false,
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "es6",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "resolveJsonModule": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ]
  }
}

package.json

{
  "name": "ng-app",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng test/e2e",
    "server:start": "ts-node-dev --respawn --transpileOnly ./src/server/app.ts"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "~7.2.0",
    "@angular/common": "~7.2.0",
    "@angular/compiler": "~7.2.0",
    "@angular/core": "~7.2.0",
    "@angular/forms": "~7.2.0",
    "@angular/platform-browser": "~7.2.0",
    "@angular/platform-browser-dynamic": "~7.2.0",
    "@angular/router": "~7.2.0",
    "core-js": "^2.5.4",
    "rxjs": "~6.3.3",
    "tslib": "^1.9.0",
    "zone.js": "~0.8.26"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.13.0",
    "@angular/cli": "~7.3.9",
    "@angular/compiler-cli": "~7.2.0",
    "@angular/language-service": "~7.2.0",
    "@types/express": "4.16.1",
    "@types/jasmine": "~2.8.8",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "codelyzer": "~4.5.0",
    "express": "4.17.0",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.0.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~1.1.2",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "ts-node-dev": "1.0.0-pre.39",
    "tslint": "~5.11.0",
    "typescript": "~3.2.2"
  }
}

1 个答案:

答案 0 :(得分:0)

在您的tsconfig中将“模块”设置为“ commonjs”。