Node Lambda:导入ts-node导致TypeError

时间:2016-10-11 19:54:19

标签: node.js typescript typeerror node-modules

我是节点和编写服务器端代码的新手,所以请耐心等待。 目前,我正在使用Typescript编写节点lambda。为了在我的项目中使用它,我需要将typescript模块作为依赖项,因此我将它们列在我的package.json文件中,并且它们与npm install一起安装。接下来我运行npm test并收到此错误日志。

LT-2012011001:example-data-sync amohnacs$ npm test

> example-data-sync@1.0.0 test /Users/amohnacs/Developer/git/example-data-sync
> nyc ./node_modules/.bin/jasmine-ts ./spec/**/*.spec.ts


/Users/amohnacs/Developer/git/example-data-sync/node_modules/ts-node/src/index.ts:313
      throw new TypeError(
            ^
TypeError: Unable to require `.d.ts` file.
This is usually the result of a faulty configuration or import. Make sure there is a `.js`, `.json` or another executable extension and loader (attached before `ts-node`) available alongside     `/Users/amohnacs/Developer/git/example-data-sync/node_modules/any-promise/implementation.d.ts`.
at getOutput (/Users/amohnacs/Developer/git/example-data-sync/node_modules/ts-node/src/index.ts:313:17)
at /Users/amohnacs/Developer/git/example-data-sync/node_modules/ts-node/src/index.ts:334:18
at Object.compile (/Users/amohnacs/Developer/git/example-data-sync/node_modules/ts-node/src/index.ts:462:19)
at Object.m._compile (/Users/amohnacs/Developer/git/example-data-sync/node_modules/ts-node/src/index.ts:392:44)
at Module._extensions..js (module.js:550:10)
at Object.require.extensions.(anonymous function) [as .ts] (/Users/amohnacs/Developer/git/example-data-sync/node_modules/ts-node/src/index.ts:395:12)
at NYC._readTranspiledSource (/Users/amohnacs/Developer/git/example-data-sync/node_modules/nyc/index.js:150:26)
at NYC.addFile (/Users/amohnacs/Developer/git/example-data-sync/node_modules/nyc/index.js:134:21)
at /Users/amohnacs/Developer/git/example-data-sync/node_modules/nyc/index.js:166:11
at /Users/amohnacs/Developer/git/example-data-sync/node_modules/nyc/index.js:231:5
npm ERR! Test failed.  See above for more details.

这是我的package.json

{
  "name": "example-data-sync",
  "version": "1.0.0",
  "description": "An example project using the serverless framework for a lambda that subscribes to kinesis events.",
  "main": "index.js",
  "scripts": {
    "postinstall": "./node_modules/.bin/tsd install && ./node_modules/.bin/tsd link",
    "sls:init": "./node_modules/.bin/sls project init -c",
    "test": "./node_modules/.bin/nyc ./node_modules/.bin/jasmine-ts ./spec/**/*.spec.ts",
    "dp:dev:meta": "sls meta sync -s dev -r us-east-1",
    "dp:dev:cf": "sls resources deploy -s dev -r us-east-1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://gitlab.com/danteinc-sandbox/example-data-sync.git"
  },
  "keywords": [
    "kinesis",
    "event",
    "stream"
  ],
  "author": "John Gilbert <john.gilbert@danteinc.com> (danteinc.com)",
  "private": true,
  "license": "SEE LICENSE IN LICENSE.md",
  "bugs": {
    "url": "https://gitlab.com/danteinc-sandbox/example-data-sync/issues"
  },
  "homepage": "https://gitlab.com/danteinc-sandbox/example-data-sync#README",
  "devDependencies": {
    "aws-sdk": "^2.6.1",
    "jasmine-console-reporter": "^1.2.7",
    "jasmine-ts": "0.0.3",
    "nyc": "^8.1.0",
    "serverless": "^0.5.0",
    "serverless-meta-sync": "^0.1.0",
    "ts-node": "^1.3.0",
    "tsd": "^0.6.5",
    "typescript": "^1.8.10"
  },
  "dependencies": {
    "bluebird": "^3.3.5",
    "dante-commons-lambda": "^0.X.0",
    "debug": "^2.2.0",
    "highland": "^2.5.1",
    "lodash": "^3.10.1",
    "moment": "^2.12.0"
  },
  "nyc": {
    "lines": 95,
    "statements": 95,
    "functions": 95,
    "branches": 95,
    "include": [
      "src/**/*.ts"
    ],
    "exclude": [
      "spec/**/*.spec.ts",
      "typings"
    ],
    "extension": [
      ".ts"
    ],
    "require": [
      "ts-node/register"
    ],
    "reporter": [
      "json",
      "html",
      "text-summary"
    ],
    "cache": false,
    "check-coverage": true,
    "all": true
  }
}

它告诉我,我的项目配置不正确,但是在ts-node中出现了错误的路径。在我的项目配置中是否存在我遗漏或不正确的内容,或者我可能使用了错误版本的ts-node或Typescript。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

package.json nyc.exclude 部分添加 node_modules

"nyc": {
  "exclude": [
    "spec/**/*.spec.ts",
    "typings",
    "node_modules"
  ],

答案 1 :(得分:0)

就我而言,以下解决了问题,但不排除 .ts 文件:

  • 我安装了 ts-jest,请参阅说明 here
  • 然后,在 jest.config.js 中,我添加了
globals: {
  'ts-jest': {
    isolatedModules: true
  },
},

根据this fix