Closed BusinessDuck closed 2 years ago
Можно конечно собрать. А поделись детальнее, где у тебя не заводится, чтобы я смог проверить? В целом тренд на то, чтобы не поддерживать cjs. Это лишние артефакты, плюс потенциальный dual package hazard. Кажется, не осталось непреодолимых кейсов. А рано или поздно понадобится какой-нибудь node-fetch, который уже тоже esm only.
На счет pm2 я еще в 2020 у них в тикете проверял, что все работает (хотя ниже там в комментах не у всех работает и сам тикет открыт до сих пор).
Может попробуем дебют в esm завести?)
Можно конечно собрать.
А поделись детальнее, где у тебя не заводится, чтобы я смог проверить?
В целом тренд на то, чтобы не поддерживать cjs. Это лишние артефакты, плюс потенциальный dual package hazard. Кажется, не осталось непреодолимых кейсов. А рано или поздно понадобится какой-нибудь node-fetch, который уже тоже esm only.
На счет pm2 я еще в 2020 у них в тикете проверял, что все работает (хотя ниже там в комментах не у всех работает и сам тикет открыт до сих пор).
Может попробуем дебют в esm завести?)
попробую сегодня, теоретически это может и ускорить его даже
попробую сегодня, теоретически это может и ускорить его даже
Давай. Ну если что cjs соберем конечно)
Попробовал мигрировать и куча проблем сразу вылезло
1 . TS не компилирует с расширением импорты import { foo } from './bar.js'
Увы это точно не продакшин уровень, не буду пока мигрировать, когда --experimental-modules
заупстят, тогда можно начинать уже... Я же еще в браузере планировал запускаться, а там наверняка тоже боль с этим
Ок, собираем cjs тогда!
Собрал версию с поддержкой cjs. Установить можно через npm i tinkoff-invest-api@next
Также надо обновить ts и vscode до последних версий.
Проблемы вылезли для subpath + wildcard, через который экспортятся все тиньковские типы.
Если в tsconfig.json
оставить "moduleResolution": "node"
, то VSCode не видит package.exports и предлагает некорректные пути (а корректный tinkoff-invest-api/generated
наоборот не предлагает):
А если вручную исправить пути на tinkoff-invest-api/generated/marketdata
, ts ругается, что типов не обнаружено:
Код не запускается.
Если в tsconfig.json
поставить новый "moduleResolution": "nodenext"
, то VSCode вариантов вообще не предлагает:
Зато код запускается :)
С не-subpath импортами все хорошо:
Пишут, что поддержки subpath в ближайшее время не будет. Вот еще тикет в репе тайпскрипта.
Вобщем вариант просто ручками все тинькофф-типы ре-экспортить либо в package.exports, либо в отдельном файлике.
@BusinessDuck попробуй у себя эту версию. И напиши что как.
Получилось запустить, exports
корректно не работают, пока лучше их вообще убрать (локально удалил их чтобы собралось), с ними не собирается финальный модуль в стратегиях уже, говорит что пути /dist/
в них не прописаны, поэтому к dist
напрямую сходить не дает сборщик. Я бы пока просто убрал, потом можем быть сделать ручной экспорт отдельным обновлением.
Сейчас запушу ядро, там можно собрать в репозитории Strategies слинковать ядро так npm link @debut/community-core ../Core
и поиграться запросами истории командой npm run compile && npm run testing -- --bot=FTBot --ticker=TSLA --days=10 --visualize
. Token берется и доходит до сдк, не знаю в чем дело =(
Чтобы увидеть логи, нужно вот этот лог вынести из if
, дебаг режима нету у debut =(
path: '/tinkoff.public.invest.api.contract.v1.InstrumentsService/GetInstrumentBy',
code: 16,
details: 'Authentication failed',
trackingId: '5e02342fdc95b8c7528cbd8e1cdbe28b',
envoyUpstreamServiceTime: '8',
ratelimit: '200, 200;w=60',
ratelimitRemaining: '199',
ratelimitReset: '199'
Запросы истории заработали, перевыпустил токен, видимо со старым что-то не так было, Подписка на свечи тоже заработала, проверил выглядит хорошо все, сделки осталось проверить, это чуть позже
Хотел вручную зареэкспортить все типы из Тинькофф, там тоже проблемка, т.к. есть дублирующиеся экспорты:
Перечислять явно все типы совсем не хочется. Тогда остается вариант перечислить эти файлы в package.exports:
"./marketdata": {
"import": "./dist/generated/marketdata.js",
"require": "./cjs/generated/marketdata.js"
},
И тогда импорты будут выглядеть так:
import { CandleInterval } from 'tinkoff-invest-api/marketdata';
В принципе довольно лаконично получается. @BusinessDuck Что скажешь?
exports корректно не работают, пока лучше их вообще убрать
Ты имеешь ввиду вообще секцию exports убрать или только часть про Тинькофф типы?
если все как ты в последнем сообщении предложил заработает - то можно оставлять, сделай с таким перечислением релиз и я проверю. На моей стороне проблема была когда есть exports в package.json, а я импортирую из /dist/ директории, там ругался толи тайпскрипт толи нода сама.
когда есть exports в package.json, а я импортирую из /dist/ директории, там ругался толи тайпскрипт толи нода сама
Да, это нода. Если есть exports, то можно импортить только то, что в exports. Сейчас соберу.
А ты когда exports удалил, то импортил пути напрямую tinkoff-invest-api/cjs/marketdata
?
Новая версия выехала. Импорты доступны так:
import { CandleInterval } from 'tinkoff-invest-api/marketdata';
Тег тот же:
npm i tinkoff-invest-api@next
@BusinessDuck
import { CandleInterval } from 'tinkoff-invest-api/marketdata';
Проверил, js действительно видит import и require из библиотеки, TypeScript же упорно не хочет компилироваться, ругаясь на то, что типов нет.
semantic error TS2307: Cannot find module 'tinkoff-invest-api/marketdata' or its corresponding type declarations.
4.7 TypeScript примерно такой синтаксис требует https://devblogs.microsoft.com/typescript/announcing-typescript-4-7-beta/#package-json-exports-imports-and-self-referencing
// package.json
{
"name": "my-package",
"type": "module",
"exports": {
".": {
// Entry-point for `import "my-package"` in ESM
"import": {
// Where TypeScript will look.
"types": "./types/esm/index.d.ts",
// Where Node.js will look.
"default": "./esm/index.js"
},
// Entry-point for `require("my-package") in CJS
"require": {
// Where TypeScript will look.
"types": "./types/commonjs/index.d.cts",
// Where Node.js will look.
"default": "./commonjs/index.cjs"
},
}
},
// Fall-back for older versions of TypeScript
"types": "./types/index.d.ts",
// CJS fall-back for older versions of Node.js
"main": "./commonjs/index.cjs"
}
UPD: Руками попробовал прописать в package.json
не взлетело =( Тебе нужен явно TS проект для тестирования ибо именно тайпскрипт капризничает, js чистый все ок
UPD2: Если не получится тайпскрипт завести на exports
, то пока придется убрать exports
вообще и жить с импортами из dist
. Большинство проектов думаю на тайпскрипте делаются тк там черт ногу сломит в типах возвращаемых из API данных
Попробовал typescript 4.7
и даже так npm install typescript@beta
, руками прописал в package.json
все что нужно и не завелось
error TS2307: Cannot find module 'tinkoff-invest-api/marketdata' or its corresponding type declarations.
7 import { CandleInterval } from 'tinkoff-invest-api/marketdata';
Резюмирую сюда, что обсудили в тг.
Если не использовать "module": "NodeNext"
, тогда ts ругается на tinkoff-invest-api
Cannot find module 'tinkoff-invest-api/marketdata' or its corresponding type declarations.
Если использовать "module": "NodeNext"
, тогда ts ругается на другие библиотеки, например @master-chief/alpaca
:
temp/test.ts:2:49 - error TS7016: Could not find a declaration file for module '@master-chief/alpaca'. '.../node_modules/@master-chief/alpaca/dist/cjs/index.cjs' implicitly has an 'any' type.
Try `npm i --save-dev @types/master-chief__alpaca` if it exists or add a new declaration (.d.ts) file containing `declare module '@master-chief/alpaca';`
import { Bar, AlpacaClient, AlpacaStream } from '@master-chief/alpaca';
Кажется у них проблема в том, что генерятся cjs
и для них тайпинги должны лежать в d.cts
а не d.ts
, либо нужно указать types
внутри exports.require
. В любом случае таких либ может быть много.
Решили совсем убрать package.exports
и оставить только main
и module
. Соответственно импорты в cjs будут такие:
import { TinkoffInvestApi } from 'tinkoff-invest-api';
import { CandleInterval } from 'tinkoff-invest-api/cjs/generated/marketdata';
Выложил версию, @BusinessDuck проверяй :)
Все работает, можно релизить ;)
Зарелизил 4.0.0 с поддержкой cjs.
Заодно завел тикет в @master-chief/alpaca https://github.com/117/alpaca/issues/106
Для корректной работы требуется 2 вида сборок, сконфигурируй сборщик по образу и подобию дебюта Используй в package.json что-то типо того, чтобы мог работать как require c commonjs так и модульная архитектура.
Пример настроек в package.json
более современный подход через
exports
тут https://antfu.me/posts/publish-esm-and-cjs