如何在没有所有React“沙盒”依赖的情况下将React Provider开发为NPM软件包?

问题描述

我希望将出于开发目的的“登录代码从多个微型应用程序提取<LoginProvider />到单个NPM包中。提供程序本身不是UI元素,只是跟踪我们从Auth0创建/GET然后在后端创建/GET以加载用户数据的过程的一种方式。我正在使用汇总从Typescript转换为ES5。

我以前没有制作过NPM软件包,因此我对最佳做法有些不确定。我想我想拥有一个具有“之前”授权和“之后”授权状态的本地沙箱,以便可以证明此提供程序可与UI元素一起使用。还是一个坏主意?如果这是一个坏主意,这是npm link的目的吗? 我不明白的一件事是如何构建此Provider,而又不暴露使用package json实际不需要的dep如webpack / babel或create-react-app。所有的教程都是关于制作UI组件的,我没有做,因为我不想公开UI元素的“沙盒”。

我的package.json当前看起来像:

{
  "name": "loginas","version": "0.0.0","description": "LoginAs provider for development","main": "index.tsx","module": "build/bundle.loginas.js","scripts": {
    "build": "rm -rf build && rollup -c","lint": "eslint","lint:fix": "eslint './src/**/*.{ts,tsx}' --fix","prettier": "prettier","prettier:write": "npm run prettier","test": "test","start": "rollup -c -w"
  },"repository": {
    "type": "git","url": "utils"
  },"author": "Me","license": "ISC","peerDependencies": {
    "react": "^16.8.0","react-dom": "^16.8.0"
  },"devDependencies": {
    "@rollup/plugin-node-resolve": "^9.0.0","@types/react": "^16.9.49","@types/react-dom": "^16.9.8","@typescript-eslint/eslint-plugin": "^4.1.1","@typescript-eslint/parser": "^4.1.1","babel-core": "^6.26.3","babel-runtime": "^6.26.0","eslint": "^7.9.0","eslint-config-prettier": "^6.11.0","eslint-config-standard-with-typescript": "^19.0.1","eslint-plugin-import": "^2.22.0","eslint-plugin-node": "^11.1.0","eslint-plugin-prettier": "^3.1.4","eslint-plugin-promise": "^4.2.1","eslint-plugin-react": "^7.20.6","eslint-plugin-react-hooks": "^4.1.2","eslint-plugin-standard": "^4.0.1","husky": "^4.3.0","lint-staged": "^10.3.0","prettier": "^2.1.1","react": "^16.13.1","react-dom": "^16.13.1","rollup": "^2.26.11","rollup-plugin-peer-deps-external": "^2.2.3","rollup-plugin-typescript2": "^0.27.2","typescript": "^4.0.2"
  }
}

到目前为止,我无法在浏览器中运行任何反应代码。下一步,这样做又有什么好处,又不增加部门?

例如,我应该只创建一个具有自己的package.json并带有create-react-app的“沙盒”目录,但将沙箱排除在汇总之外吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)