Могу ли я вызвать функцию машинописи из `gatsby-node.js` досье?

#javascript #typescript #gatsby

Вопрос:

Мой gatsby-node.js файл становится огромным, поэтому я абстрагирую его в разных файлах. Однако я хотел бы использовать Typescript для вспомогательных файлов.

Я попробовал 2 вещи

  1. Сначала я создал функцию внутри файла Javascript ( helper.js ) и вызвал ее из gatsby-node.js файла. Это сработало отлично.
  2. Затем я переименовал расширение файла в helper.ts , но я вижу сбои в gatsby develop команде
 Error: Cannot find module './src/generators/usda/helper.ts'
  Require stack:
  - /Users/hhimanshu/code/prsnl/ts/forkfacts/gatsby-node.js
  - /Users/hhimanshu/code/prsnl/ts/forkfacts/node_modules/gatsby/dist/bootstrap/resolve-module-exports.js
  - /Users/hhimanshu/code/prsnl/ts/forkfacts/node_modules/gatsby/dist/bootstrap/load-plugins/validate.js
  - /Users/hhimanshu/code/prsnl/ts/forkfacts/node_modules/gatsby/dist/bootstrap/load-plugins/load.js
  - /Users/hhimanshu/code/prsnl/ts/forkfacts/node_modules/gatsby/dist/bootstrap/load-plugins/index.js
  - /Users/hhimanshu/code/prsnl/ts/forkfacts/node_modules/gatsby/dist/bootstrap/load-config-and-plugins.js
  - /Users/hhimanshu/code/prsnl/ts/forkfacts/node_modules/gatsby/dist/services/initialize.js
  - /Users/hhimanshu/code/prsnl/ts/forkfacts/node_modules/gatsby/dist/services/index.js
  - /Users/hhimanshu/code/prsnl/ts/forkfacts/node_modules/gatsby/dist/state-machines/develop/services.js
  - /Users/hhimanshu/code/prsnl/ts/forkfacts/node_modules/gatsby/dist/state-machines/develop/index.js
  - /Users/hhimanshu/code/prsnl/ts/forkfacts/node_modules/gatsby/dist/commands/develop-process.js
  - /Users/hhimanshu/code/prsnl/ts/forkfacts/.cache/tmp-18033-PnVyC3Y4PhuY

  - loader.js:889 Function.Module._resolveFilename
    internal/modules/cjs/loader.js:889:15

  - loader.js:745 Function.Module._load
    internal/modules/cjs/loader.js:745:27

  - loader.js:961 Module.require
    internal/modules/cjs/loader.js:961:19

  - v8-compile-cache.js:159 require
    [forkfacts]/[v8-compile-cache]/v8-compile-cache.js:159:20

  - gatsby-node.js:7 Object.<anonymous>
    /Users/hhimanshu/code/prsnl/ts/forkfacts/gatsby-node.js:7:55

  - v8-compile-cache.js:192 Module._compile
    [forkfacts]/[v8-compile-cache]/v8-compile-cache.js:192:30

  - loader.js:1101 Object.Module._extensions..js
    internal/modules/cjs/loader.js:1101:10

  - loader.js:937 Module.load
    internal/modules/cjs/loader.js:937:32

  - loader.js:778 Function.Module._load
    internal/modules/cjs/loader.js:778:12

  - loader.js:961 Module.require
    internal/modules/cjs/loader.js:961:19

  - v8-compile-cache.js:159 require
    [forkfacts]/[v8-compile-cache]/v8-compile-cache.js:159:20

  - resolve-module-exports.ts:197 resolveModuleExports
    [forkfacts]/[gatsby]/src/bootstrap/resolve-module-exports.ts:197:26

  - validate.ts:349 forEach
    [forkfacts]/[gatsby]/src/bootstrap/load-plugins/validate.ts:349:31
 

Можно ли использовать TypeScript для написания функций и их вызова gatsby-node.js ?

Спасибо

Ответ №1:

Короткий ответ — нет, Длинный ответ-да, если у вас правильная настройка. Typescript — это надмножество javascript, что означает, что typescript должен быть сначала «перенесен» в javascript, прежде чем он сможет быть выполнен любым движком javascript (такого понятия, как «движок typescript», не существует).

Для достижения этой цели существует множество проектов, таких как babel, SWC или ESBuild. Но, как вы уже упоминали, Гэтсби, просто загляните в такое руководство, как это:

https://www.digitalocean.com/community/tutorials/how-to-set-up-a-gatsby-project-with-typescript

Или просто погуглите «транспилируйте машинописный текст gatsby.js» или что-то вроде этого 🙂

Комментарии:

1. В настройках я уже разбираюсь в машинописном тексте. Когда я говорю «понимаю», я могу создавать компоненты с помощью TypeScript. Эта ошибка возникает, когда я использую gatsby-node.js и вызываю функцию, созданную с помощью TypeScript. Я надеюсь, что это поможет

2. Тем не менее, файл javascript не может напрямую вызывать «.ts» — он может ссылаться только на его транспилированную версию… еще раз проверьте настройки и узнайте, где будут храниться транспилированные файлы javascript вашего «usda/helper.ts» ->, если вы найдете путь к чему-то вроде «dist/usda/helpers.js», тогда это сработает 😉