首页 新闻 会员 周边 捐助

esbuild: 如何实现类似 webpack DefinePlugin 的变量定义功能

0
悬赏园豆:30 [已解决问题] 解决于 2023-12-14 19:05

园子的 vscode 扩展准备改用 esbuild,之前用的是 webpack,在 webpack 的配置文件中使用 DefinePlugin 在 build 时在代码中添加变量定义

plugins: [      
    new webpack.DefinePlugin({
        CNBLOGS_CLIENTID: JSON.stringify(env.CLIENTID || 'UNSET'),
        CNBLOGS_CLIENTSECRET: JSON.stringify(env.CLIENTSECRET || 'UNSET'),
    }),
]

请问在 esbuild 中如何实现?

dudu的主页 dudu | 高人七级 | 园豆:29333
提问于:2023-12-13 15:37
< >
分享
最佳答案
0

在 esbuild 中,你可以使用 define 选项来实现类似于 webpack 中 DefinePlugin 的功能。这个选项允许你在构建时定义全局变量,这样它们就可以在你的代码中使用。以下是一个简单的示例:

javascript
Copy code
const esbuild = require('esbuild');
const env = process.env;

esbuild.build({
entryPoints: ['your-entry-file.js'],
bundle: true,
outfile: 'output.js',
define: {
'process.env.CNBLOGS_CLIENTID': JSON.stringify(env.CLIENTID || 'UNSET'),
'process.env.CNBLOGS_CLIENTSECRET': JSON.stringify(env.CLIENTSECRET || 'UNSET'),
},
}).catch(() => process.exit(1));
在这个例子中,define 选项中的对象键值对就是要定义的变量和它们的值。这会在构建时将这些变量注入到代码中,类似于 webpack 的 DefinePlugin。

注意:在 esbuild 中,使用 process.env 来模拟环境变量。在代码中,你可以通过 process.env.CNBLOGS_CLIENTID 和 process.env.CNBLOGS_CLIENTSECRET 来访问这些变量。

记得根据你的实际需求适配构建配置,并确保你的代码能够正确使用这些定义的变量。

收获园豆:30
Technologyforgood | 大侠五级 |园豆:7775 | 2023-12-13 22:08

通过 define 配置解决了

const options = {
    ...defaultOptions,
    entryPoints: ['./src/extension.ts'],
    external: ['vscode'],
    define: {
        CNBLOGS_CLIENTID: JSON.stringify(process.env.CLIENTID),
        CNBLOGS_CLIENTSECRET: JSON.stringify(process.env.CLIENTSECRET),
    }
}

await esbuild.build(options)
dudu | 园豆:29333 (高人七级) | 2023-12-14 19:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册