如何使用 esbuild 设置 React 的全局属性

发布于 2025-01-14 19:27:59 字数 1528 浏览 1 评论 0原文

根据文档,使用 define 是设置构建环境属性的建议方法。

当我运行我的应用程序时,出现进程未定义错误。

我的 esconfig 如下:

        await build({
            entryPoints: ['./src/index.tsx'],
            outdir: './build',
            bundle: true,
            incremental: true,
            metafile: true,
            target: 'es6',
            loader: { '.png': 'file' },
            minify: !dev,
            sourcemap: 'inline',
            define: { 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development') },
            plugins: [
                sassPlugin(),
                svg(),
                copy({
                    resolveFrom: 'cwd',
                    assets: {
                        from: ['./public/*'],
                        to: ['./build2/*'],
                    },
                }),
                copy({
                    resolveFrom: 'cwd',
                    assets: {
                        from: ['./public/images/*'],
                        to: ['./build2/images/*'],
                    },
                }),
            ],
            watch: dev
                ? {
                        onRebuild: (error) => {
                            if (error) {
                                console.error(error);
                            } else {
                                console.log('rebuild done');
                            }
                        },
                  }
                : false,
        });

我也欢迎其他设置全局属性来控制配置的方法。

According to the docs using define is the suggested way of setting the env properties for a build.

When I run my app with I get a process is not defined error.

My esconfig is as follows:

        await build({
            entryPoints: ['./src/index.tsx'],
            outdir: './build',
            bundle: true,
            incremental: true,
            metafile: true,
            target: 'es6',
            loader: { '.png': 'file' },
            minify: !dev,
            sourcemap: 'inline',
            define: { 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development') },
            plugins: [
                sassPlugin(),
                svg(),
                copy({
                    resolveFrom: 'cwd',
                    assets: {
                        from: ['./public/*'],
                        to: ['./build2/*'],
                    },
                }),
                copy({
                    resolveFrom: 'cwd',
                    assets: {
                        from: ['./public/images/*'],
                        to: ['./build2/images/*'],
                    },
                }),
            ],
            watch: dev
                ? {
                        onRebuild: (error) => {
                            if (error) {
                                console.error(error);
                            } else {
                                console.log('rebuild done');
                            }
                        },
                  }
                : false,
        });

I'm also open to other ways of setting global properties to control the configuration.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

仙女 2025-01-21 19:27:59

您收到 process is not Defined 错误,因为您实际上没有在 define 选项中定义 process,而是定义了 process.env。 NODE_ENV

这可能违反直觉,但这就是 define 选项的使用方式。它实际上并没有定义变量,只是将所有看起来像 define key 的标记替换为相应的值。

You are getting process is not defined error because you actually do not define process in define option, you do define process.env.NODE_ENV.

It may be counterintuitively but it is how define option is used. It doesn't actually defines variable and just replaces all tokens that look like define key with corresponding value.

那请放手 2025-01-21 19:27:59

我在构建开始之前编写了一个配置/环境文件。
然后我的反应应用程序只需要知道 env 文件所在的位置。

const config: IEnv = {
    ENV: process.env.NODE_ENV ? process.env.NODE_ENV : 'development',
    USE_EMU: process.env.USE_EMU === '1' ? true : false,
    USE_DEV: process.env.USE_DEV === '1' ? true : false,
    VERSION: process.env.VERSION ? process.env.VERSION : 'dev',
};
fs.writeFileSync('src/env.json', JSON.stringify(config), { encoding: 'utf8' });

I've resorted to writing a config/env file before the build starts.
My react app then just needs to know where the env file is located.

const config: IEnv = {
    ENV: process.env.NODE_ENV ? process.env.NODE_ENV : 'development',
    USE_EMU: process.env.USE_EMU === '1' ? true : false,
    USE_DEV: process.env.USE_DEV === '1' ? true : false,
    VERSION: process.env.VERSION ? process.env.VERSION : 'dev',
};
fs.writeFileSync('src/env.json', JSON.stringify(config), { encoding: 'utf8' });

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文