2015-05-05 4 views
3

Я использую TypeScript 1.5.0-бета, и я использую код Visual Studio для создания простого Node-сервера, используя пример, который показал Андерс Хейлсберг при сборке.Nodejs с TypeScript дает странные ошибки

///<reference path="typings/node/node.d.ts"/> 

import { createServer } from "http" 

export function simpleServer(port: number, message: string) 
{ 
    createServer((req, res) => 
    { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello World\n'); 
    }).listen(port, '127.0.0.1'); 

    console.log('Server running at http://127.0.0.1:1337/'); 
} 

У меня есть три вопроса

1) С помощью этого кода, всякий раз, когда я пытаюсь построить TS файл либо с помощью визуального кода студии или команды $ сервера TSC -m CommonJS, он продолжает давать странные ошибки как эти

error TS1008: Unexpected token; 'module 
, class, interface, enum, import or statement' expected 

2) Он также пытается построить node.d.ts файл, который я ссылающийся и дает дополнительный «:» ожидаемые сообщения об ошибках.

3) Это больше вопрос с кодом Visual Studio. Как мы получаем VS Code для создания всех ts-файлов в проекте/папке и генерации js-файлов. Я следил за инструкциями для установки типов скриптов для VS Code, но мне по-прежнему приходится индивидуально создавать каждый файл ts для генерации js-кода.

Я знаю, что хрюкать - это один из способов сделать это, но насколько я знаю, VS Code должен иметь возможность создавать все ts-файлы в такой папке, как Visual Studio. Пожалуйста, поправьте меня, если я ошибаюсь.

Спасибо.

ответ

0

Я не могу помочь вам с # 3, так как я еще не пробовал VS Code. Тем не менее, на # 1 и # 2 есть несколько вещей, которые вам нужно сделать:

A.) Включите тип модуля CommonJS в компиляторе TypScript. В Visual Studio вы сделаете это, перейдя в Project -> Properties -> Typcript Build и изменив «Module system» на «CommonJS». В командной строке вы сделаете это, передав в tsc.exe параметр «-module commonjs». Извините, я не знаю, как добиться этого в VS Code.

B.) Я думаю, что пример кода должен выглядеть примерно так. Я не уверен, если Андерс, возможно, давая предварительный просмотр будущего синтаксиса на конференции, но должно работать для вас:

///<reference path="typings/node/node.d.ts"/> 

import Http = require('http') 

export function simpleServer(port: number, message: string) 
{ 
    Http.createServer((req, res) => 
    { 
     res.writeHead(200, { 'Content-Type': 'text/plain' }); 
     res.end('Hello World\n'); 
    }).listen(port, '127.0.0.1'); 

    console.log('Server running at http://127.0.0.1:1337/'); 
} 
+0

Спасибо за ответ (с). Для a) я уже пробовал эту команду. Не работал для меня. Для b), если вы видите мой вопрос, я упомянул, что использую версию 1.5.0 beta, которая имеет более новый синтаксис, который я использовал. Если я использую старый синтаксис, он работает. Это похоже на использование старого TS для компиляции кода. –

+0

О, я вижу. Извините, что не читал внимательно. Да, в таком случае я не уверен, что происходит. –

0

1 - модуль Error

Это будет быть решены при переходе к tsconfig.json под # 3 ниже

2 - Эталонная ошибка:

Синтаксис для справки должен быть

import http = require('http'); 

3 - Автоматическое составление TS файлов JS

  1. Настройка TSconfig.JSON-файл с настройками
  2. (опция) включить автоматическое сохранение функции в Visual Studio кодекса
  3. настроить задачу в Visual Studio кодекса
  4. Используйте функцию часов в машинописи компиляторе

Вот tsconfig.json

{ 
    "compilerOptions": { 
     "module": "commonjs", 
     "noImplicitAny": false, 
     "removeComments": true, 
     "preserveConstEnums": true, 
     "target": "ES5", 
     "sourceMap": true, 
     "outDir": "../dist" 
    } 
} 

Вот определенные задачи .settings/tasks.json --p указывает, что вы хотите скомпилировать через tsconfig.json --w указывает, что вы хотите перекомпилировать, когда файлы будут сохранены Вы можете обратиться к опции компилятора here

{ 
    "version": "0.1.0", 
    // The command is tsc. 
    "command": "tsc", 
    // Show the output window only if unrecognized errors occur. 
    "showOutput": "silent", 
    // Under windows use tsc.exe. This ensures we don't need a shell. 
    "windows": { 
     "command": "tsc.exe" 
    }, 
    // args is the HelloWorld program to compile. 
    "args": ["--p", "./PATH-TO-TSCONFIG-FOLDER", "--w"], 
    // use the standard tsc problem matcher to find compile problems 
    // in the output. 
    "problemMatcher": "$tsc" 
} 

Узел + машинопись = Awesome!

+0

его сообщение, что -p и -w не являются допустимыми параметрами. Когда я делаю tsc --help, я не вижу это как допустимый вариант. Может быть, это старая версия? tsc -v дает мне 1.0.3.0. Есть идеи? –

+0

Я использую 1.5.0-бета, которая является первой версией (помимо альфы), которая поддерживает tsconfig.json с конфигурацией сборки. Вы можете/должны рассмотреть возможность обновления вашей версии. – Brocco

+0

И это как раз моя проблема. У меня есть новейшая версия Type 1.5.0-beta. Но по какой-то причине компилятор по-прежнему использует старый машинописный текст. Я пытаюсь найти способ переписать это. –

3

Хорошо, я наконец-то смог выяснить, что происходит. Так как я установил Visual Studio 2013 и TypeScript 1.4, он создал файлы в файлах C:/Program Files (x86)/Microsft SDK/TypeScript/1.0. Таким образом, каждый раз, когда я использую команду tsc, она всегда делала ошибку до версии 1.0.3.0, которая работает с TypeScript 1.4, а не с 1.5.0-бета. Когда я устанавливаю TypeScript 1.5.0-beta через узел, он создает файлы для новой версии в C: \ Users \ Krishna V \ AppData \ Roaming \ npm \ tsc

Итак, для # 1, чтобы исправить версию компиляции я изменил файл task.json, чтобы использовать полный путь для параметров команд и окон. Таким образом, это будет выглядеть следующим образом

{ 
    "version": "0.1.0", 

    // The command is tsc. 
    "command": "C:\\Users\\Krishna^ V\\AppData\\Roaming\\npm\\tsc", 

    // Show the output window only if unrecognized errors occur. 
    "showOutput": "silent", 

    // Under windows use tsc.exe. This ensures we don't need a shell. 
    "windows": { 
     "command": "C:\\Users\\Krishna^ V\\AppData\\Roaming\\npm\\tsc" 
    }, 

    // args is the HelloWorld program to compile. 
    "args": [], 

    "isShellCommand": true, 

    // use the standard tsc problem matcher to find compile problems 
    // in the output. 
    "problemMatcher": "$tsc" 
} 

Для # 2, кажется, что его ноу проблем с Node.d.ts быть синхронизированы с машинопись 1.5.0-бета и уже есть подобные проблемы с среагировать. d.ts открылся в git для этого.

Для # 3, tsconfig.json работает только с TypeScript версии 1.5.0-бета, и поскольку tsc использовал неправильную версию, он никогда не использовал tsconfig. Теперь, когда он использует правильную версию, он использует tsconfig и, следовательно, строит все файлы, упомянутые в tsconfig. Например, одно из них (один с ES5 и ES6)

{ 
    "compilerOptions": { 
     "target": "ES5", 
     "module": "commonjs", 
     "sourceMap": true, 
     "removeComments": true 
    }, 
    "files": [ 
     "server.ts","config.ts","models/user.ts" 
    ] 
} 

OR 

{ 
    "compilerOptions": { 
     "target": "ES6", 
     "sourceMap": true, 
     "removeComments": true 
    }, 
    "filesGlob": [ 
     "./**/*.ts" 
    ] 
} 

В этом случае, он будет собирать три упомянутых в первом варианте файлы или все файлы в тс опции 2.

+0

У меня была та же проблема с Visual Studio с установленным TypeScript 1.4. Я изменил путь, и он отлично работал.Любая идея, как заставить NPM искать путь по умолчанию, прежде чем он будет искать ProgramFiles (x86)? –

+0

Где взять файл task.json? – sms

Смежные вопросы