Как мне опубликовать пользовательский хук React, написанный на Typescript, в npm?

#reactjs #typescript #npm #react-hooks

#reactjs #typescript #npm #реагирующие хуки

Вопрос:

Я написал хук React на Typescript и хотел бы опубликовать его в npm, но, похоже, я не могу правильно настроить конфигурацию сборки. Я не использую никаких других инструментов сборки, кроме tsc . Я прочитал рекомендации в документах Typescript docs, React docs и в нескольких сообщениях в блоге.

Я не получаю никаких ошибок при сборке и публикации, но когда я пытаюсь импортировать модуль в другой проект, я получаю сообщение об ошибке при импорте React. Тем не менее, все, что я подготовил, предполагает, что react это должно быть a peerDependency при публикации пользовательских хуков.

Не удается найти модуль ‘react’ из ‘../useMyHook/build/index.js ‘

  • tsc: v4.1.3
  • реагировать: v16.14.0

Репозиторий: https://github.com/raineorshine/use-swipe-to-dismiss

tsconfig.json:

 {
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "declaration": true,
    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "node",
    "strict": true,
    "target": "es5",
    "outDir": "./build"
  },
  "include": ["src"],
  "exclude": ["node_modules", "**/__tests__/*"]
}
 

package.json (сокращенно):

 {
  "name": "useMyHook",
  "version": "0.1.0",
  "files": [
    "build/**/*"
  ],
  "main": "build",
  "scripts": {
    "build": "tsc",
    "prepare": "npm run build"
  },
  "peerDependencies": {
    "react": ">=16.0.0",
    "typescript": ">=4.1.0"
  },
  "devDependencies": {
    "@types/node": "^14.14.21",
    "@types/react": "^17.0.0"
  }
}
 

index.ts (сокращенно):

 import { useState } from 'react'

const useMyHook = () => {

  const [x, setX] = useState<number>(0)

  return {
    onClick: () => {
      console.log(x)
    }
  }
}

export default useMyHook
 

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

1. Содержит ли содержимое вашей build папки все, что вы ожидаете? Комбинация файлов .d.ts и .js? Возможно, вам потребуется включить "noEmit": false его в свой tsconfig, но я не уверен в этом.

2. оформите мой репозиторий, я использую typescript и его пакет react в npm. github.com/EliHood/materialui-gif-textbox , надеюсь, кодовая база может дать некоторое представление.

3. @LindaPaiste: папка сборки содержит index.js и index.d.ts . К сожалению "noEmit": false , не помогает.

4. @BARNOWL: Спасибо, но ваш репозиторий — это компонент, а не хук. Он включает react в себя как зависимость, поэтому он не сталкивается с той же ошибкой при попытке опубликовать с react помощью as a peerDependency .

5. В моем случае я мог бы импортировать ваш пакет npm из другого проекта react без каких-либо проблем.