Как разрешить ситуацию с курицей / яйцом с помощью `tsc` и` npm install`? - PullRequest
0 голосов
/ 31 мая 2018

Итак, у меня есть стандартная структура папок

dist/
src/

, где src содержит мои файлы .ts, а dist - мои файлы .js.(У меня есть "outDir":"dist" в моем файле tsconfig.json, а "includes" установлен на 'src').

Обратите внимание , что dist находится в моем файле gitignore, поэтому он не находится в управлении версиями, и поэтому, когда он идет в Travis или CircleCI, в * нет ничего1015 * папка, пока я не запусту tsc.

Вот проблема - если я сначала запустите npm install - произойдет сбой, потому что у меня есть это в моем package.json:

"bin":{
  "foo" :"dist/cli.js"   // dist/cli.js does not exist yet
}

но если я сначала запусту tsc, то в tsc будут отсутствовать зависимости, необходимые для компиляции, которые появятся, если я запусту npm install.

только * 1030Чтобы решить эту проблему, я должен сначала установить все необходимые tsc зависимости, затем запустить tsc, а затем npm install --production.

Однако это не самая удобная вещь для выполнения.

Кто-нибудь сталкивался с этой проблемой и нашел хорошее решение?

Ответы [ 4 ]

0 голосов
/ 09 июня 2018

Абсолютно не ваш ответ, но я обычно просто предпочитаю фиксировать JavaScript.

Недостаток: Тонны дополнительной истории мерзавцев / раздувания.

Мои очки:

  • В конце концов, вы создаете проект javascript.Поэтому нужно проверить время выполнения javascript, и если предполагается, что этот проект также будет использоваться из машинописи, протестируйте сгенерированный .d.ts;
  • Версия TSC, которая генерирует ваш код, не должна быть другой движущейся частью длятесты и ваши потребители.Вы бы протестировали сгенерированный вывод, а не свой источник, по сравнению со многими версиями TSC.
  • Уменьшая границу «движущихся частей», добавив .js и .d.ts, вы получите гораздо больше (= предсказуемость), чем то, чтовы проиграли (история с мерзавцами).
0 голосов
/ 31 мая 2018

Похоже, preinstall скрипт - это то, что вам нужно

Добавьте в ваш package.json файл как

{
  "scripts": {
    "preinstall" : "tsc ..." // < build stuff
  }
}

Ссылка https://docs.npmjs.com/misc/scripts

0 голосов
/ 04 июня 2018

Я бы зарегистрировал файл ./lib/cli содержимое файла

#!/usr/bin/env node
require('../dist/cli.js')

и просто запустил npm, а затем tsc.

0 голосов
/ 31 мая 2018

Я не помню, чтобы у меня была эта проблема, но по крайней мере в одном случае я сделал что-то, что обойдет эту проблему.

Я поместил index.js в корневую папку, которая выполняет фактическую зависимость в dist,Тогда бин, который ищет npm, - это файл, который присутствует, и он не должен волноваться.

Конечно, это не сработает, пока не запустится tsc.Но это должно решить вашу проблему с курицей и яйцом.

...