Seize your moment! ๐Ÿ‘พ

์•ˆ๋…•ํ•˜์„ธ์š”. Eric์ž…๋‹ˆ๋‹ค. ์ œ ๋ธ”๋กœ๊ทธ์— ๋ฐฉ๋ฌธํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป ๊ฐœ๋ฐœ๊ณต๋ถ€/Problem & Solution

[Eric's JS] Build error {}.DEBUG = namespaces; ์—๋Ÿฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ( #redocusaurus , #docusaurus )

Eric_ko 2024. 7. 2. 22:44

ํšŒ์‚ฌ์—์„œ Docusaurus ๋กœ ํšŒ์‚ฌ ๋ฌธ์„œ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

์ด๋•Œ ์‚ฌ์šฉ๋˜๋Š” Pakage ์ค‘ ํ•˜๋‚˜๊ฐ€ Redocusaurus ๋ฅผ ์ด์šฉํ•ด์„œ REST API ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์—ˆ๋Š”๋ฐ,
ํ•˜๋‹จ์˜ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฉด์„œ ์ž๊พธ build๊ฐ€ ์•ˆ๋˜์—ˆ๋‹ค.

Error


  
[ERROR] Error: Unable to build website for locale en.
at tryToBuildLocale (/eric/node_modules/@docusaurus/core/lib/commands/build.js:54:19)
at async /eric/node_modules/@docusaurus/core/lib/commands/build.js:65:9
at async mapAsyncSequential (/eric/node_modules/@docusaurus/utils/lib/jsUtils.js:20:24)
at async Command.build (/eric/node_modules/@docusaurus/core/lib/commands/build.js:63:5) {
[cause]: server.bundle.js:210767
{}.DEBUG = namespaces;
^
SyntaxError: Unexpected token '.'
at new Script (node:vm:93:7)
at module.exports (/eric/node_modules/eval/eval.js:83:18)

Solution


  
plugins: [
...
async function customPlugin(context, opts) {
return {
name: 'custom-plugin',
configureWebpack(config, isServer, utils, content) {
// Modify internal webpack config. If returned value is an Object, it
// will be merged into the final config using webpack-merge;
// If the returned value is a function, it will receive the config as the 1st argument and an isServer flag as the 2nd argument.
return {
plugins: [
new webpack.DefinePlugin({
// IMPORTANT: To fix debug libraryโ€˜s bug
// {}.DEBUG = namespaces; // SyntaxError: Unexpected token '.'
'process.env.DEBUG': 'process.env.DEBUG',
})
]
}
},
}
}
],

ํ•ด๋‹น ์—๋Ÿฌ๋Š” Docusaurus ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋กœ, ํŠนํžˆ server.bundle.js ํŒŒ์ผ์˜ {}.DEBUG = namespaces; ์ค„์—์„œ ๊ตฌ๋ฌธ ์˜ค๋ฅ˜(SyntaxError: Unexpected token '.')๊ฐ€ ๋ฐœ์ƒํ•œ๊ฒƒ์œผ๋กœ ๋ณด์˜€๋‹ค.
์ด ์˜ค๋ฅ˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋กœ ๋ณด์˜€์œผ๋ฉฐ, ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด({})์— ์ง์ ‘์ ์œผ๋กœ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•œ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์ œ์‹œ๋œ ์ฝ”๋“œ๋Š” Docusaurus์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •์„ ์ˆ˜์ •ํ•˜์—ฌ Webpack์˜ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
๊ตฌ์ฒด์ ์œผ๋กœ webpack.DefinePlugin์„ ์‚ฌ์šฉํ•˜์—ฌ process.env.DEBUG ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ , ์ด ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๋””๋ฒ„๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฒ„๊ทธ๋ฅผ ์šฐํšŒํ•˜์˜€๋‹ค.

์—๋Ÿฌ ๋ฐœ์ƒ ์›์ธ

{}.DEBUG = namespaces;๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์œ ํšจํ•œ ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๋‹ค.
๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด {}์— ์†์„ฑ์„ ๋ฐ”๋กœ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์„ค๋ช…

์ œ์‹œ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ Webpack ์„ค์ •์„ ์ˆ˜์ •ํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ์šฐํšŒํ•˜์˜€๋‹ค.
webpack.DefinePlugin์„ ์‚ฌ์šฉํ•˜์—ฌ process.env.DEBUG๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ,
๋””๋ฒ„๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

1. customPlugin ํ•จ์ˆ˜ ์ถ”๊ฐ€: Docusaurus ์„ค์ • ํŒŒ์ผ์— ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€

2. configureWebpack ํ•จ์ˆ˜ ์‚ฌ์šฉ: ์ด ํ”Œ๋Ÿฌ๊ทธ์ธ์€ configureWebpack ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด Webpack ์„ค์ •์„ ์ˆ˜์ •

3. webpack.DefinePlugin ์„ค์ •:

-new webpack.DefinePlugin์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ •์˜.
-'process.env.DEBUG': 'process.env.DEBUG'๋กœ ์„ค์ •ํ•˜์—ฌ, ๊ธฐ์กด์˜ {}.DEBUG = namespaces; ์ฝ”๋“œ๋ฅผ ๋Œ€์ฒดํ•˜์˜€๋‹ค.

๋””๋ฒ„๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ DEBUG ์„ค์ •์„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜์—ฌ ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋ฅผ ํšŒํ”ผํ•˜์˜€๋‹ค.

์ด๋ ‡๊ฒŒ ์ˆ˜์ •ํ•˜๋ฉด, {}.DEBUG = namespaces; ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๊ณ , ๋””๋ฒ„๊ทธ ์„ค์ •์„ ์ •์ƒ์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋ฅผ ์šฐํšŒํ•˜๊ณ , Docusaurus ํ”„๋กœ์ ํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋นŒ๋“œ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ์„œ ๊ฒฐ๊ตญ ๋นŒ๋“œํ•˜์˜€๋‹ค.

์ฐธ๊ณ  ๋ฌธ์„œ