рдирдорд╕реНрддреЗ!
рдореИрдВ рдПрдХ lib рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЬрд╣рд╛рдЬреЛрдВ рдХреЛ рдПрдирдкреАрдПрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд░реИрдЬрд╝рд▓-рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЬреЗрдПрд╕ рд▓реЛрдбрд░ рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд░реИрдЬрд╝рд▓-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрд┐рд▓реНрдб рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЕрдм рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ "рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЯреЛрдХрди рдЖрдпрд╛рдд" рдорд┐рд▓рддрд╛ рд╣реИ - рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рд╡рд╣ рд╕рд░реНрд╡рд░ рдмрд┐рд▓реНрдб рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА?
рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж!
рдЗрд╕реЗ рд╕реБрд▓рдЭрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рдЖрдЧрд╛рдореА рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП:
рдПрд╕рдПрд╕рдЖрд░ рдХреЗ рджреМрд░рд╛рди webpack-node-externals
рд▓рд╛рдЧреВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдмрдВрдбрд▓рд┐рдВрдЧ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП node_modules
рд╕реЗ рдХреЛрдИ рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреЗ razzle.config.js
рдореЗрдВ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдХреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛:
config.externals = target === 'node' ? [
nodeExternals({
whitelist: [
dev ? 'webpack/hot/poll?300' : null,
/\.(eot|woff|woff2|ttf|otf)$/,
/\.(svg|png|jpg|jpeg|gif|ico)$/,
/\.(mp4|mp3|ogg|swf|webp)$/,
/\.(css|scss|sass|sss|less)$/,
/^my-untranspiled-package/
].filter(Boolean),
}),
] : [];
... рдЬрд╣рд╛рдВ рдЗрд╕ рд░реЗрдкреЛ рдореЗрдВ рдЙрд╕ рдХреЛрдб рдХрд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ createConfig.js
рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
@zth рдзрдиреНрдпрд╡рд╛рдж !!
@zth рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдкрд╣рд▓реА рдмрд╛рд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдорд┐рд▓рд╛? рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ред рдЖрдкрдХреЛ babel-loader
рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА рдЖрдкрдХреЛ babelOptions
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рд╡реЗ .babelrc
рдореЗрдВ рдЕрдирдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реНрдб рдкреИрдХреЗрдЬ рдХреЗ рдЕрдВрджрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рд╣реЛрдВ, рдЖрдкрдХреЗ рдРрдкреНрд╕ рдкреИрдХреЗрдЬ рдореЗрдВ /babelrc
рд╣реЛрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред
рдпрд╣рд╛рдВ рдПрдХ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ:
'use strict';
const nodeExternals = require('webpack-node-externals');
const fs = require('fs');
module.exports = {
modifyBabelOptions() {
return {
presets: ['razzle/babel'],
plugins: ['transform-flow-strip-types'],
};
},
modify(config, { target, dev }, webpack) {
// package un-transpiled packages
const babelRuleIndex = config.module.rules.findIndex(
(rule) => rule.use && rule.use[0].loader && rule.use[0].loader.includes('babel-loader')
);
config.module.rules[babelRuleIndex] = Object.assign(config.module.rules[babelRuleIndex], {
include: [
...config.module.rules[babelRuleIndex].include,
fs.realpathSync('./node_modules/untranspiled-package')
],
});
config.externals =
target === 'node'
? [
nodeExternals({
whitelist: [
dev ? 'webpack/hot/poll?300' : null,
/\.(eot|woff|woff2|ttf|otf)$/,
/\.(svg|png|jpg|jpeg|gif|ico)$/,
/\.(mp4|mp3|ogg|swf|webp)$/,
/\.(css|scss|sass|sss|less)$/,
/^untranspiled-package/,
].filter(Boolean),
}),
]
: [];
// return
return config;
},
};
рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдПрд╕-рд▓реЛрдбрд░ рдХреЗ рд▓рд┐рдП рднреА @MrLoh рдХреА рддрд░рд╣ рд╣реА рдЯреНрд░рд┐рдХ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдЕрдиреБрдордд рдкреИрдХреЗрдЬ рдЬрд╛рдВрдЪреЗрдВ, рдЖрдк рд╡рд╣рд╛рдВ рдЕрдкрдирд╛ рдкреИрдХреЗрдЬ рдирд╛рдо рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░реИрдЬрд╝рд▓ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо config.externals рдХреЗ рдмрд┐рдирд╛ рд╣реЛрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдореВрд▓ @MrLoh рд╕рдорд╛рдзрд╛рди рдореЗрдВ рднреА рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛ рд╕рдХрддреА рд╣реИ (config.externals рд╡рд┐рд▓реЛрдкрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЗрдЦреЗрдВ: https:// github.com/jaredpalmer/razzle/issues/842#issuecomment-475722036)
const allowedPackages = ['my-component']
const allowedPackagePaths = allowedPackages.map(packageName =>
fs.realpathSync('./node_modules/' + packageName)
)
const tsRuleIndex = config.module.rules.findIndex(
rule =>
rule.use && rule.use[0].loader && rule.use[0].loader.includes('ts-loader')
)
if (tsRuleIndex === -1) {
throw Error(
'This component assumes that you are using ts-loader. If you are not using it, then you might need to check and test code for how would it work with other loaders'
)
}
config.module.rules[tsRuleIndex] = {
...config.module.rules[tsRuleIndex],
include: [
...config.module.rules[tsRuleIndex].include,
...allowedPackagePaths,
],
}
delete config.externals
рдпрд╣ рдореЗрд░реЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ред рдореЗрд░рд╛ рд╕рд╡рд╛рд▓ рд╣реИ, рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдмрдВрдбрд▓ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред razzle.config.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдЖрдо рдХреЛ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ред рдЖрдкрдХреЛ
babel-loader
рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА рдЖрдкрдХреЛbabelOptions
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рд╡реЗ.babelrc
рдореЗрдВ рдЕрдирдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓реНрдб рдкреИрдХреЗрдЬ рдХреЗ рдЕрдВрджрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рд╣реЛрдВ, рдЖрдкрдХреЗ рдРрдкреНрд╕ рдкреИрдХреЗрдЬ рдореЗрдВ/babelrc
рд╣реЛрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИредрдпрд╣рд╛рдВ рдПрдХ рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ: