Как установить и запустить Typescript локально в npm?

Я хочу установить и запустить Typescript (то есть без глобальных зависимостей).

Вот мой файл package.json:

{
  "name": "foo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "tsc": "tsc"
  },
  "devDependencies": {
    "typescript": "^1.8.10"
  },
  "author": "",
  "license": "ISC"
}

Затем я запускаю:

npm install
npm run tsc

Однако, когда я запускаю вторую команду, я получаю слишком много ошибок, она не может отобразить все это. Большая часть этого похожа на следующее:

../foo/node_modules/typescript/lib/lib.d.ts(5015,5): error TS2300: Duplicate identifier 'webkitTransformOrigin'.
../foo/node_modules/typescript/lib/lib.d.ts(5016,5): error TS2300: Duplicate identifier 'webkitTransformStyle'.
../foo/node_modules/typescript/lib/lib.d.ts(5017,5): error TS2300: Duplicate identifier 'webkitTransition'.
../foo/node_modules/typescript/lib/lib.d.ts(5018,5): error TS2300: Duplicate identifier 'webkitTransitionDelay'.
../foo/node_modules/typescript/lib/lib.d.ts(5019,5): error TS2300: Duplicate identifier 'webkitTransitionDuration'.
../foo/node_modules/typescript/lib/lib.d.ts(5020,5): error TS2300: Duplicate identifier 'webkitTransitionProperty'.

В npm-debug.log я получаю:

0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/nodejs', '/usr/bin/npm', 'run', 'tsc' ]
2 info using npm@3.10.2
3 info using node@v5.12.0
4 verbose run-script [ 'pretsc', 'tsc', 'posttsc' ]
5 info lifecycle foo@1.0.0~pretsc: foo@1.0.0
6 silly lifecycle foo@1.0.0~pretsc: no script for pretsc, continuing
7 info lifecycle foo@1.0.0~tsc: foo@1.0.0
8 verbose lifecycle foo@1.0.0~tsc: unsafe-perm in lifecycle true
9 verbose lifecycle foo@1.0.0~tsc: PATH: /usr/lib/node_modules/npm/bin/node-gyp-bin:/home/vagrant/foo/node_modules/.bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
10 verbose lifecycle foo@1.0.0~tsc: CWD: /home/vagrant/foo
11 silly lifecycle foo@1.0.0~tsc: Args: [ '-c', 'tsc' ]
12 silly lifecycle foo@1.0.0~tsc: Returned: code: 2  signal: null
13 info lifecycle foo@1.0.0~tsc: Failed to exec tsc script
14 verbose stack Error: foo@1.0.0 tsc: `tsc`
14 verbose stack Exit status 2
14 verbose stack     at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/lib/utils/lifecycle.js:242:16)
14 verbose stack     at emitTwo (events.js:100:13)
14 verbose stack     at EventEmitter.emit (events.js:185:7)
14 verbose stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/lib/utils/spawn.js:40:14)
14 verbose stack     at emitTwo (events.js:100:13)
14 verbose stack     at ChildProcess.emit (events.js:185:7)
14 verbose stack     at maybeClose (internal/child_process.js:850:16)
14 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:215:5)
15 verbose pkgid foo@1.0.0
16 verbose cwd /home/vagrant/foo
17 error Linux 3.13.0-88-generic
18 error argv "/usr/bin/nodejs" "/usr/bin/npm" "run" "tsc"
19 error node v5.12.0
20 error npm  v3.10.2
21 error code ELIFECYCLE
22 error foo@1.0.0 tsc: `tsc`
22 error Exit status 2
23 error Failed at the foo@1.0.0 tsc script 'tsc'.
23 error Make sure you have the latest version of node.js and npm installed.
23 error If you do, this is most likely a problem with the foo package,
23 error not with npm itself.
23 error Tell the author that this fails on your system:
23 error     tsc
23 error You can get information on how to open an issue for this project with:
23 error     npm bugs foo
23 error Or if that isn't available, you can get their info via:
23 error     npm owner ls foo
23 error There is likely additional logging output above.
24 verbose exit [ 1, true ]

Обратите внимание, что удаление пакета с последующей установкой машинописного текста глобально решает проблему. Однако, если я затем использую npm install для повторной установки локальных пакетов, проблема снова возникает.

8 ответов

Решение

Чтобы установить локальный TypeScript в проекте в качестве зависимости разработки, вы можете использовать --save-dev ключ

npm install --save-dev typescript

Это также пишет машинопись в вашем package.json

Вы также должны иметь tsconfig.json файл. Например

{
  "compilerOptions": {
    "target": "ES5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "node_modules",
    ".npm"
  ]
}

Для получения дополнительной информации о tsconfig вы можете увидеть здесь http://www.typescriptlang.org/docs/handbook/tsconfig-json.html

Мне понадобилось некоторое время, чтобы найти решение этой проблемы - это в оригинальном вопросе. Вам нужно иметь script что вызывает tsc в вашем package.json файл, чтобы вы могли запустить:

npm run tsc 

Включают -- перед тем, как передать параметры (или просто включить их в сценарий):

npm run tsc -- -v

Вот пример package.json:

{
  "name": "foo",
  "scripts": {
    "tsc": "tsc"
  },
  "dependencies": {
    "typescript": "^1.8.10"
  }
}

Начиная с версии 5.2.0, после локальной установки через

npm i typescript --save-dev

... вам больше не нужна запись в scripts раздел package.json - теперь вы можете запустить компилятор с npx:

npx tsc

Теперь вам не нужно обновлять файл package.json каждый раз, когда вы хотите скомпилировать с другими аргументами.

Вы должны сообщить npm, что "tsc" существует как локальный пакет проекта (через свойство "scripts" в вашем package.json), а затем запустить его через npm run tsc, Чтобы сделать это (по крайней мере, на Mac), я должен был добавить путь к фактическому компилятору в пакете, как это

{
  "name": "foo"
  "scripts": {
    "tsc": "./node_modules/typescript/bin/tsc"
  },
  "dependencies": {
    "typescript": "^2.3.3",
    "typings": "^2.1.1"
  }
}

После этого вы можете запустить любую команду TypeScript, например: npm run tsc -- --init (аргументы приходят после первого --).

Теперь вы можете использовать ts-node, что делает вашу жизнь такой же простой, как

npm install -D ts-node
npm install -D typescript

ts-node script.ts

tsc требуется файл конфигурации или.ts(x) файлы для компиляции.

Чтобы решить обе ваши проблемы, создайте файл с именем tsconfig.json со следующим содержанием:

{
    "compilerOptions": {
        "outFile": "../../built/local/tsc.js"
    },
    "exclude": [
        "node_modules"
    ]
}

Кроме того, измените свой запуск npm с этим

tsc --config /path/to/a/tsconfig.json

Чтобы установить и запустить TypeScript локально в проекте npm, выполните следующие действия:

  1. Инициализируйте свой проект . Если вы еще этого не сделали, создайте новый проект npm или перейдите к существующему.

  2. установите TypeScript как зависимость разработки , используя следующую команду:

            npm install --save-dev typescript
    
  3. Создайте файл tsconfig.json : в каталоге вашего проекта запустите:

            npx tsc --init
    
    • Это создастtsconfig.jsonфайл с настройками по умолчанию. Вы можете изменить этот файл в соответствии с потребностями вашего проекта.
  4. Добавьте скрипт tsc в свойpackage.jsonфайл:

            {
      "name": "myproject",
      "scripts": {
        "tsc": "tsc"
      },
      // ... other properties
    }
    
  5. Напишите код TypeScript :

    • Создать.tsфайл (например,app.ts) в папке вашего проекта.
    • Напишите свой код TypeScript в этом файле.
  6. Запустите TypeScript в своем проекте, используя:

            npm run tsc
    
  7. Запустите свой код JavaScript . Вы можете запустить код JavaScript, используяnode. Например:

            node app.js
    

Убедитесь, что у вас установлены последние версии Node и npm .

Обратите внимание, если вы используете typings сделайте следующее:

rm -r typings
typings install

Если вы делаете урок Angular 2, используйте это:

rm -r typings
npm run postinstall
npm start

если postinstall Команда не работает, попробуйте установить глобальные наборы так:

npm install -g typings

Вы также можете попробовать следующее в отличие от postinstall:

typings install

и вы должны решить эту проблему!

Другие вопросы по тегам