๋ด ํ์ผ ์์คํ ์ด ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ด๋๋ก ๋ด ์๋ฒ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ฃจํธ๋ก ์ฎ๊ธฐ๊ณ ์ถ์ต๋๋ค.
-/src
-์ฌ๊ธฐ๋ ์ฌ๋
-...๋ฑ.
razzle์ ํํค์ณ ๋ณด๋ฉด babel๊ณผ webpack์ด ๋ค์์์ ์ฝ๋ ์์น๋ฅผ ์ป๋ ๊ฒ ๊ฐ์ต๋๋ค.
module.exports = {
dotenv: resolveApp('.env'),
appPath: resolveApp('.'),
appBuild: resolveApp('build'),
appBuildPublic: resolveApp('build/public'),
appManifest: resolveApp('build/assets.json'),
appPublic: resolveApp('public'),
appNodeModules: resolveApp('node_modules'),
appSrc: resolveApp('src'),
appPackageJson: resolveApp('package.json'),
appServerIndexJs: resolveApp('src'),
appClientIndexJs: resolveApp('src/client'),
testsSetup: resolveApp('src/setupTests.js'),
appBabelRc: resolveApp('.babelrc'),
appEslintRc: resolveApp('.eslintrc'),
appRazzleConfig: resolveApp('razzle.config.js'),
nodePaths: nodePaths,
ownPath: resolveOwn('.'),
ownNodeModules: resolveOwn('node_modules'),
publicUrl: getPublicUrl(resolveApp('package.json')),
servedPath: getServedPath(resolveApp('package.json')),
};
์ ์ผํ ๋ฌธ์ ๋ ๊ฐ์ด ํ๋ ์ฝ๋ฉ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ฌ์ ์ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
razzle์์ razle.config.js๋ก resolveApp ํจ์๋ฅผ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๋ ๋ฐฉ๋ฒ์ ์๊ฐํด ๋์ต๋๋ค.
const appDirectory = fs.realpathSync(process.cwd());
const resolveApp = relativePath => path.resolve(appDirectory, relativePath);
๊ท์น์ ๋ฐ๋ณตํ๊ณ ํ๊ฒฝ ๋ฐ ๊ตฌ์ฑ์ ๋ฐ๋ผ include ์์ฑ์ ๋ด ์ฌ์ฉ์ ์ง์ ๊ฒฝ๋ก๋ก ๋ฐ๊ฟ๋๋ค.
appConfig.module.rules.map(rule => {
if (rule.include && rule.test) {
rule.include = [
resolveApp('server'),
resolveApp('src'),
];
}
})
์ด๊ฒ์ ์ ๋ง๋ก ํดํคํ๊ฒ ๋๊ปด์ง๋๋ค. path.js์ ํ๋ ์ฝ๋ฉ๋ ๊ฐ์ ํ๊ฒฝ ๋ณ์๋ก ์ถ์ํํ๊ฑฐ๋ ๋ด๊ฐ ์ํ ๋๋ง๋ค ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ก createConfig ํจ์์ ๋ ธ์ถํ ์ ์์ต๋๊น?
์ข์ ์๊ฐ์ธ ๊ฒ ๊ฐ์ผ๋ฉด ๊ธฐ๊บผ์ด ์ด ์์ ์ ํ๊ณ ์ถ์ง๋ง, ์ด๋ฏธ ๋ด๊ฐ ๋์น๊ณ ์๋ ํด๊ฒฐ์ฑ ์ด ์์ ์ ์์ต๋๋ค. ๋์์ฃผ์ธ์ :)
ํ! ๊ทธ๋์ ์ฌ๊ธฐ ์คํ ์์ค์ ์ผ์ ์ ๋ฌด ๋ฐ ์ํ ์ฌ์ด์ ๊ฑฐ๋๊ฐ ์์ต๋๋ค. ๊ด๋ฆฌํด์ผ ํ ๊ฒ์ด ๋ง๊ธฐ ๋๋ฌธ์ GitHub ๋ด์ ์ฌ์ฉํ์ฌ ์ฌ๊ธฐ์ ๊ธฐ์ ๋ช ๊ฐ์ง๋ฅผ ์๋ํํฉ๋๋ค. ์ด ํน์ GitHub ๋ด์ ์ต๊ทผ ํ๋์ด ํ๋์ ์์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ถ์คํ ๊ฒ์ผ๋ก ํ์ํ ๊ฒ์ ๋๋ค. ๋ฉฐ์น ๋์ ๋ ์ด์ ํ๋์ด ์์ผ๋ฉด ํ์๋ฉ๋๋ค. ์ด ์์ ์ ๊ฐ์ธ์ ์ผ๋ก ์ฌ๊ฐํ๊ฒ ๋ฐ์๋ค์ด์ง ๋ง์ญ์์ค. ์ด๊ฒ์ ์์ ํ ์๋ํ๋ ์์ ์ ๋๋ค. ์ด๊ฒ์ด ์ค์๋ผ๋ฉด ๋๊ธ, DM, ์บ๋ฆฌ์ด ๋น๋๊ธฐ ๋๋ ์ฐ๊ธฐ ์ ํธ๋ฅผ ๋ณด๋ด์ฃผ์ญ์์ค.
์. ๋ด ์๋ฒ๋ฅผ src ๋ด๋ถ์ ์ ์๋ฒ ํด๋๋ก ์ฎ๊ฒผ์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ razzle.config.js์์ ์๋ฒ์ ๋ํ ๊ตฌ์ฑ์ ํธ์งํฉ๋๋ค.
config.entry.pop()
config.entry.push('./src/server')
๊ทธ๊ฒ์ ์ ์๋ํ์ง๋ง์ด ๋๋ฒ๊น (--inspect) nodejs๊ฐ ์์๋ ํ์ฒ๋ผ ๋ณด์ ๋๋ค.
ํ! ๊ทธ๋์ ์ฌ๊ธฐ ์คํ ์์ค์ ์ผ์ ์ ๋ฌด ๋ฐ ์ํ ์ฌ์ด์ ๊ฑฐ๋๊ฐ ์์ต๋๋ค. ๊ด๋ฆฌํด์ผ ํ ๊ฒ์ด ๋ง๊ธฐ ๋๋ฌธ์ GitHub ๋ด์ ์ฌ์ฉํ์ฌ ์ฌ๊ธฐ์ ๊ธฐ์ ๋ช ๊ฐ์ง๋ฅผ ์๋ํํฉ๋๋ค. ์ด ํน์ GitHub ๋ด์ ์ต๊ทผ ํ๋์ด ํ๋์ ์์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ถ์คํ ๊ฒ์ผ๋ก ํ์ํ ๊ฒ์ ๋๋ค. ๋ฉฐ์น ๋์ ๋ ์ด์ ํ๋์ด ์์ผ๋ฉด ํ์๋ฉ๋๋ค. ์ด ์์ ์ ๊ฐ์ธ์ ์ผ๋ก ์ฌ๊ฐํ๊ฒ ๋ฐ์๋ค์ด์ง ๋ง์ญ์์ค. ์ด๊ฒ์ ์์ ํ ์๋ํ๋ ์์ ์ ๋๋ค. ์ด๊ฒ์ด ์ค์๋ผ๋ฉด ๋๊ธ, DM, ์บ๋ฆฌ์ด ๋น๋๊ธฐ ๋๋ ์ฐ๊ธฐ ์ ํธ๋ฅผ ๋ณด๋ด์ฃผ์ญ์์ค.
๋นํ์ฑ ์ํ๋ก ์ธํด ProBot์ด ์๋์ผ๋ก ๋ซ์์ต๋๋ค. ์ด๊ฒ์ด ์ค์๋ผ๋ฉด Holler, ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ค์ ์ด ๊ฒ์ ๋๋ค.
์ด ๋ฌธ์ ๋ ์ข ๋ฃ๋์ด์๋ ์ ๋ฉ๋๋ค.
๋ํ ๋ค๋ฅธ ์์ฉ ํ๋ก๊ทธ๋จ ๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํ๊ธฐ ์ํด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋์ผํ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์์ API ์ฝ๋๋ฅผ ํธ์คํ ํ๋ ๊ฝค ํฐ ํ๋ก์ ํธ์ด๊ณ 'src'๊ฐ ์ ๋ง ๋ชจํธํฉ๋๋ค.
@nvma ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํ๋ ์๋ฅผ ์ ๊ณตํด ์ฃผ์๊ฒ ์ต๋๊น? ๊ฐ์ฌ ํด์!
์ด๊ฒ์ ๊ฝค ์ค์ํ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ตฌ์ฑํด์ผ ํ๋ _core_ ๋๋ ํ ๋ฆฌ ๋ชฉ๋ก์ ๋ง๋ค ์ ์๋ค๋ฉด ์ต๋ํ ๋นจ๋ฆฌ PR์ ์ ์ถํ๊ณ ์ถ์ต๋๋ค. ๋ฐ์ฅ, ๋ด๊ฐ ๋งํ๊ณ ์ถ์ง๋ง : build
, src
ํด๋ผ์ด์ธํธ, src
์๋ฒ, ๋ฐ public
.
๋ด razzle / webpack ๊ตฌ์ฑ์์ ํด๊ฒฐํ ์ ์์์ต๋๋ค.
๋ด ๋ ์ด๋์๋ ์ผ์ข ์ ๊ณํ์ด ์์ต๋๋ค ๐
๋ค๋ฅธ ์ฌ๋์๊ฒ ์ ์ฉํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ์ต๊ทผ์ razzle.config.js
์์ ์ด ์์
์ ์ํํด์ผ ํ์ผ๋ฉฐ ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
const defaultOptions = {
server: null,
client: null,
};
function modifyEntryPoints(baseConfig, env, webpack, userOptions = {}) {
const options = { ...defaultOptions, ...userOptions };
const webpackConfig = { ...baseConfig };
const { client, server } = options;
/* This is required to rename the entry points instead of using the defaults */
if (env.target === "node" && server) {
webpackConfig.entry = [server];
}
if (env.target !== "node" && client) {
webpackConfig.entry.client = client;
}
return webpackConfig;
}
module.exports = {
plugins: [
{
func: modifyEntryPoints,
options: {
server: path.join(__dirname, "./src/docker-server"),
client: path.join(__dirname, "./src/docker-client"),
},
},
]
};
๊ฐ๋ฐ์์์ ์์
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ด ๋ ์ด๋์๋ ์ผ์ข ์ ๊ณํ์ด ์์ต๋๋ค ๐