Razzle: razzle.config.js рдореЗрдВ path.js рдорд╛рдиреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рдЬреБрд▓ре░ 2018  ┬╖  12рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jaredpalmer/razzle

рдореИрдВ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдбреАрдЖрдИрдЖрд░ рдХреЛ рд░реВрдЯ рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдореЗрд░рд╛ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗред

-/src
-рд╕рд░реНрд╡рд░
-...рдЖрджрд┐ред

рд░реИрдЬрд╝рд▓ рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдкрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмреЗрдмреЗрд▓ рдФрд░ рд╡реЗрдмрдкреИрдХ рдХреЛ рдХреЛрдб рдХреА рд▓реЛрдХреЗрд╢рди рдорд┐рд▓ рд░рд╣реА рд╣реИ

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 рдкрд░ рд░рд┐рдЬрд╝реЙрд▓реНрдпреБрдПрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрдкреА рдХрд░рдХреЗ рдПрдХ рдХрд╛рдо рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рд╣реВрдБ

const appDirectory = fs.realpathSync(process.cwd());
const resolveApp = relativePath => path.resolve(appDirectory, relativePath);

рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдкрд┐рдВрдЧ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореИрдВ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдкрде рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ ...

      appConfig.module.rules.map(rule => {
        if (rule.include && rule.test) {
          rule.include = [
            resolveApp('server'),
            resolveApp('src'),
          ];
        }
      })

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИрдХреА рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдкрде рдореЗрдВ рд╣рд╛рд░реНрдб рдХреЛрдбрд┐рдд рдорд╛рдиреЛрдВ рдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдореЗрдВ рд╕рд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдпрд╛ рдЙрдиреНрд╣реЗрдВ createConfig рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмреЗрдирдХрд╛рдм рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЬрдм рднреА рдореИрдВ рдЪрд╛рд╣реВрдВ рдкрде рдмрджрд▓ рд╕рдХреВрдВ?

рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд▓рдЧрддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИред рдХреГрдкрдпрд╛ рд╕рд╣рд╛рдпрддрд╛ рдХреАрдЬрд┐рдП :)

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореЗрд░реЗ рд░рдбрд╛рд░ рдкрд░, рдПрдХ рддрд░рд╣ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ

рд╕рднреА 12 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣реЛрд▓рд╛! рддреЛ рдпрд╣рд╛рдБ рд╕реМрджрд╛ рд╣реИ, рдУрдкрди рд╕реЛрд░реНрд╕ рдФрд░ рдореЗрд░реЗ рджрд┐рди рдХреЗ рдХрд╛рдо рдФрд░ рдЬреАрд╡рди рдХреЗ рдмреАрдЪ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣рд╛рдВ рдФрд░ рд╡рд╣рд╛рдВ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд┐рдЯрд╣рдм рдмреЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ GitHub рдмреЙрдЯ рдЗрд╕реЗ рдмрд╛рд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рддреЛ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рди рд▓реЗрдВ--рдЧрдВрднреАрд░рддрд╛ рд╕реЗ--рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИ, рддреЛ рдмрд╕ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ, рдореБрдЭреЗ рдбреАрдПрдо рдХрд░реЗрдВ, рдПрдХ рд╡рд╛рд╣рдХ рдХрдмреВрддрд░, рдпрд╛ рдПрдХ рдзреВрдореНрд░рдкрд╛рди рд╕рдВрдХреЗрдд рднреЗрдЬреЗрдВред

рдХреБрдВрдЖред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ src . рдХреЗ рдЕрдВрджрд░ рдирдП рд╕рд░реНрд╡рд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛
рдФрд░ рдлрд┐рд░ razzle.config.js рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ

config.entry.pop()
config.entry.push('./src/server')

рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдмрд╛рдж (--рдирд┐рд░реАрдХреНрд╖рдг) рдиреЛрдбрдЬ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ

рд╣реЛрд▓рд╛! рддреЛ рдпрд╣рд╛рдБ рд╕реМрджрд╛ рд╣реИ, рдУрдкрди рд╕реЛрд░реНрд╕ рдФрд░ рдореЗрд░реЗ рджрд┐рди рдХреЗ рдХрд╛рдо рдФрд░ рдЬреАрд╡рди рдХреЗ рдмреАрдЪ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣рд╛рдВ рдФрд░ рд╡рд╣рд╛рдВ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд┐рдЯрд╣рдм рдмреЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ GitHub рдмреЙрдЯ рдЗрд╕реЗ рдмрд╛рд╕реА рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рддреЛ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рди рд▓реЗрдВ--рдЧрдВрднреАрд░рддрд╛ рд╕реЗ--рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИ, рддреЛ рдмрд╕ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ, рдореБрдЭреЗ рдбреАрдПрдо рдХрд░реЗрдВ, рдПрдХ рд╡рд╛рд╣рдХ рдХрдмреВрддрд░, рдпрд╛ рдПрдХ рдзреВрдореНрд░рдкрд╛рди рд╕рдВрдХреЗрдд рднреЗрдЬреЗрдВред

рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдХрд╛рд░рдг ProBot рдиреЗ рдЗрд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред рд╣реЛрд▓рд░ рдЕрдЧрд░ рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВрдЧреЗред

рдпрд╣ рдореБрджреНрджрд╛ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред

рдореИрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдПрдХ рд╣реА рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЛрдб рд╣реЛрд╕реНрдЯ рдХрд░рддреА рд╣реИ, рдФрд░ 'src' рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИред

@nvma рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╡рд┐рднрд┐рдиреНрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдзрдиреНрдпрд╡рд╛рдж!

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдлреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо _core_ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рддреЛ рдореИрдВ рдПрдХ рдкреАрдЖрд░ рдПрдПрд╕рдПрдкреА рдЬрдорд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред рдмрд▓реНрд▓реЗ рд╕реЗ, рдореИрдВ рдХрд╣реВрдВрдЧрд╛: build , src рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП, src рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП, рдФрд░ public ред

рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд░реИрдЬрд╝рд▓/рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

рдореЗрд░реЗ рд░рдбрд╛рд░ рдкрд░, рдПрдХ рддрд░рд╣ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ

рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рддреЛ рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕реЗ 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"),
      },
    },
  ]
};

рджреЗрд╡ рдореЗрдВ рддрдп

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

alexjoyner picture alexjoyner  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

panbanda picture panbanda  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

krazyjakee picture krazyjakee  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

charlie632 picture charlie632  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

sebmor picture sebmor  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ