从项目中为导入的组件反应组件环境变量
React Component env variables from project for imported component
我有一个 Create React 项目,其中包含一些用于配置的本地环境变量。
我有一个使用环境变量来配置自身的组件。它使用
导入变量
process.env.MY_VAR;
我想将组件移出到 npm 包中,但保留使用 process.env.MY_VAR
的能力。当我构建和发布包时,它将使用当前 MY_VAR
而不是我要将其导入的项目中的 MY_VAR
构建它。有没有办法让我做我想做的事。
我考虑过重构组件以将环境变量作为道具,但这不是我真正想做的事情。
有什么办法可以做我想做的事。
如果您通过 create-react-app 创建项目,那么您也可以使用 env-cmd npm package.
If you have webpack then you can use dotenv 包。或者,您可以使用以下代码来定义变量。
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
}),
如何将您的组件库视为已经构建 fully/independent 构建变量并准备好供 npm 客户端使用的 npm 包?
除非您想将库用作某种自然与周围构建环境有很多耦合的内部包,否则采用经典的 npm 方法可能更容易。如果您想发布包,这尤其有意义。在您导入的应用程序项目中,您仍然可以使用 process.env.MY_VAR
。对于库部分,我建议提交一个配置对象。
如果 process.env.MY_VAR
对于包含多个组件的整个库很重要,请从包初始化步骤开始:
import { init } from "my-comp-library"
const config = {
myVar: process.env.MY_VAR
}
const lib = init(config)
const MyComp = lib.myComp()
const App = () => <MyComp />
如果仅与库中的单个组件相关,可以直接将其作为 props 传递:
const App = () => <MyComp myVar={process.env.MY_VAR} />
在应用程序中,您可以例如创建一个已经包含其配置的包装器组件 MyAppComp
,以避免 MyComp
的冗余初始化逻辑。这里的额外好处是,如果库 public API 发生变化,您将在应用程序中只有一个地方可以更改代码。
MyAppComp.js
在应用项目中:
import { MyComp } from "my-comp-library"
export const MyAppComp = props => <MyComp myVar={process.env.MY_VAR} {...props} />
您的应用程序和组件项目的独立构建管理消除了耦合,这使得它们更易于维护。
我有一个 Create React 项目,其中包含一些用于配置的本地环境变量。 我有一个使用环境变量来配置自身的组件。它使用
导入变量process.env.MY_VAR;
我想将组件移出到 npm 包中,但保留使用 process.env.MY_VAR
的能力。当我构建和发布包时,它将使用当前 MY_VAR
而不是我要将其导入的项目中的 MY_VAR
构建它。有没有办法让我做我想做的事。
我考虑过重构组件以将环境变量作为道具,但这不是我真正想做的事情。
有什么办法可以做我想做的事。
如果您通过 create-react-app 创建项目,那么您也可以使用 env-cmd npm package.
If you have webpack then you can use dotenv 包。或者,您可以使用以下代码来定义变量。
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
}),
如何将您的组件库视为已经构建 fully/independent 构建变量并准备好供 npm 客户端使用的 npm 包?
除非您想将库用作某种自然与周围构建环境有很多耦合的内部包,否则采用经典的 npm 方法可能更容易。如果您想发布包,这尤其有意义。在您导入的应用程序项目中,您仍然可以使用 process.env.MY_VAR
。对于库部分,我建议提交一个配置对象。
如果 process.env.MY_VAR
对于包含多个组件的整个库很重要,请从包初始化步骤开始:
import { init } from "my-comp-library"
const config = {
myVar: process.env.MY_VAR
}
const lib = init(config)
const MyComp = lib.myComp()
const App = () => <MyComp />
如果仅与库中的单个组件相关,可以直接将其作为 props 传递:
const App = () => <MyComp myVar={process.env.MY_VAR} />
在应用程序中,您可以例如创建一个已经包含其配置的包装器组件 MyAppComp
,以避免 MyComp
的冗余初始化逻辑。这里的额外好处是,如果库 public API 发生变化,您将在应用程序中只有一个地方可以更改代码。
MyAppComp.js
在应用项目中:
import { MyComp } from "my-comp-library"
export const MyAppComp = props => <MyComp myVar={process.env.MY_VAR} {...props} />
您的应用程序和组件项目的独立构建管理消除了耦合,这使得它们更易于维护。