【问题标题】:importing class in Node js with typescript使用打字稿在Node js中导入类
【发布时间】:2018-10-29 15:52:34
【问题描述】:

我会在 nodejs 中导入类并在 app.ts 中使用它

var nano = require("nano");
import { EnvConfig } from './envConfig.service';
let config = new EnvConfig();
const dbCredentials: any = config.appEnv.getServiceCreds('dataservices');
export const nanodb = nano({
  url: dbCredentials.url,
});
export const nanodbCockpitLight = nanodb.use('data');
console.log(dbCredentials);

当我尝试编译时出现此错误。

import { EnvConfig } from './envConfig.service';
       ^
SyntaxError: Unexpected token {

我已经创建了 tsconfig 文件:

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": false,
    "noImplicitAny": false,
    "removeComments": true,
    "noLib": false,
    "allowSyntheticDefaultImports": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es6",
    "sourceMap": true,
    "allowJs": true,
    "outDir": "./dist",
    //"baseUrl": "src" // Attention !! nécessite l'utilisation d'un loader de module node pour fonctionner sur node
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "**/*.spec.ts"]
}

我收到此警告

在配置文件“c:/Users/EHHD05911.COMMUN/Documents/cockpitLight/DB mananger/tsconfig.json”中未找到任何输入。指定的“包含”路径为“[”src//“]”,“排除”路径为“[”node_modules”,”/.spec.ts“]”

【问题讨论】:

    标签: node.js typescript


    【解决方案1】:

    你不能直接运行 node app.ts 文件,这是行不通的 您需要像 babel js 或 typescript 编译器 tsc 这样的转译器,所以首先转译为 js 文件,然后运行 ​​node app.js

    【讨论】:

    • 嗯,是的,也不是。使用console.log('hello world'); 创建app.ts 并运行node app.ts。打印出“hello world”。这是因为 typescript 是 javascript 的超集,如果不需要转译,它就可以工作。您可以获取任何.js 文件,将其重命名为.ts,只要它是有效的js,它就是有效的ts。但是,一旦添加了 typescript 语法 (const foo: string = 'bar';),它就会中断。
    【解决方案2】:

    您正在使用.js 扩展,您需要.ts 扩展,例如:app.ts 而不是app.js

    确保你在 npm global 或 dev 依赖项中有 typescript。

    【讨论】:

    • 我在开发依赖项中添加了打字稿,但仍然有同样的问题
    【解决方案3】:

    我怀疑您导入的任何内容都具有打字稿语法(强类型等),因此直接运行 node 将不起作用。您需要先运行tsc,这会将所有内容转换为dist 文件夹中的javascript,然后运行node dist/app.js

    不过这有点麻烦,这就是为什么会有ts-node。这正是它听起来的样子,一个用于 typescript 的节点 REPL。你应该可以运行ts-node src/app.ts

    【讨论】:

      【解决方案4】:

      import { something } 是一种打字稿语法,它不适用于.js 文件。那是一种单独的语言。尝试改用require

      【讨论】:

      • 我正在将文件名硬编码为 app.ts,
      • 你想如何准确地运行它?请发布您的命令行。
      • 简单节点app.ts
      • 这与 typescript/javascript 关系不大,而与 node.js 中的模块加载关系更大。 import 适用于 typescript 和 es2015+,但您需要一个转译器(typescript/babel)才能将 import 语句更改为 require。无需手动执行此操作。
      【解决方案5】:

      使用 babel js,这是一个工具链,主要用于在当前和旧浏览器或环境中将 ECMAScript 2015+ 代码转换为向后兼容的 JavaScript 版本。

      package.json

      "dependencies": {
      "@babel/polyfill": "^7.0.0",
      }
      
      "babel": {
      "presets": [
        "@babel/preset-env"
      ]
      

      },

      "scripts": {
          "start": "server.js --exec babel-node",
      }
      

      https://babeljs.io/docs

      这将启用/解析您的导入语句。

      【讨论】:

      • babel js 是一个不错的选择,但问题是专门询问节点和打字稿,对于这种情况,打字稿编译器 (tsc) 就是答案。
      猜你喜欢
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2019-01-30
      • 2017-10-05
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      相关资源
      最近更新 更多