ãã®èšäºã§ã¯ãç§ãã¡ã®ããŒã ã1é±éåã«çµéšããªããã°ãªããªãã£ãã«ã¹ã¿ã Webpackæ§æã§Angularãã¢ããã°ã¬ãŒãããåä»ãªæ¹æ³ã«ã€ããŠèª¬æããŸãã ãããããAngularãWebpackã®èšå®ã§äœ¿çšãã人ã«ãšã£ãŠã¯ç§ãã¡ã®çµéšã圹ç«ã€ã§ããããæ®ãã¯ãææ°ã®ããã³ããšã³ããã©ãã«å°ãããšãã§ãããããããŠã©ã®ããã«çãããã瀺ãäŸãšããŠèå³æ·±ãã§ãã
ç§ãã¡ã®ããŒã ã¯ã
BILLmanager 6ã€ã³ã¿ãŒãã§ãŒã¹ã«åãçµãã§ããŸãã æŽæ°åã«ãããžã§ã¯ãã®æŠèŠãææ¡ããŠããããã«ããããžã§ã¯ãå
ã®ãã¡ã€ã«ã®æ°ãæ¢ã«67000ãè¶
ããŠããããšããç¥ããããŸãã ã¢ãŒããã¯ãã£çã«ã¯ãç»é²ã¢ãžã¥ãŒã«ãšã¡ã€ã³ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®2ã€ã®ãµããããžã§ã¯ããåºå¥ã§ããŸãã ãã¯ãããžãŒã®å ŽåãAngularã³ã³ããŒãã³ãããã£ã¬ã¯ãã£ããããã³TypeScriptã§èšè¿°ãããã¢ãžã¥ãŒã«ãåºç€ã§ãã Webã³ã³ããŒãã³ãã«ã¯ããã€ãã®ã³ã³ããŒãã³ãããããŸãã ã¹ã¿ã€ãªã³ã°ã«ã¯ãSASS / SCSSã䜿çšããCSSå€æ°ã䜿çšããŠãåã³ã³ãã€ã«ããã«ã¢ããªã±ãŒã·ã§ã³ãæãããŸãã
èæ¯
ãã¹ãŠã®çç±ããããç§ãã¡ã®çŸåšã®å°é£ã¯1幎ååã«å§ãŸããŸããã ãã®åŸãããŒã¿çã®Angular 2ãç»å Žããã°ããã§ãå瀟ã®ããã°ã©ããŒã¯Angular 1ãReactJSãããã³ç¬èªã®å°ããªãã¬ãŒã ã¯ãŒã¯ã§ã¢ããªã±ãŒã·ã§ã³ãäœæããçµéšããããŸããã åœæã®Angular 2ã«ã¯ãæåã®ããŒãžã§ã³ãšReactJSã®å©ç¹ãçµã¿èŸŒãŸããŠããŸããã ãããã£ãŠããã®çŽæïŒçµå±ãGoogleïŒãAngular 1ã®æåãããã³TypeScriptãæäŸãã圢åŒåã®ããã«éžã°ããŸããã 顧客ã«æäŸã§ããå°ããªSPAãµã€ãã¯äœæããŸãããå¿ããªãã§ãã ãããåœç€Ÿã®ã¢ããªã±ãŒã·ã§ã³ã¯é·æéæå¹ã§ãããç¶ç¶çãªãµããŒããšéçºãå¿
èŠã§ãã BILLmanagerã¯ããããã€ããŒããã¹ãã£ã³ã°ã販売ããã¯ã©ã€ã¢ã³ããšé£æºããããã«äœ¿çšãããŸãã ãããã£ãŠããããšä»ã®
ISPsystem補å
㯠ãåžžã«ä¿å®ããã³éçºãã
ãªããã°ãªããŸãã ã ååãšããŠãAngular 2ããŒã ã¯ãã§ã«ããããå Žæã§ãçŸåšã¯åã«Angularã«ãªãããã¬ãŒã ã¯ãŒã¯ã®éçºã¯é²åçã«è¡ããããšæžããŠããŸããããã¯ç€Ÿå
ããã»ã¹ã«é©ããŠããŸãã
ãã§ã«æžããããã«ãç§ãã¡ã®ãããžã§ã¯ãã¯å€§èŠæš¡ã§é·å¯¿åœã§ãã åã
ã®ã¢ã»ã³ããªã®æè»ãªèšå®ãåããè€éãªæ§æããããŸãã ãŸããWebpackã¯é·ãéãããã³ããšã³ãã®äžçã§å€§å°ã®ãããžã§ã¯ããæ§ç¯ããããã®äžçš®ã®æšæºã§ãã£ããããããã§ã®éžæã¯æ確ã§ããã
ãã®çµæããããžã§ã¯ãã®æ§æã®äžè¬çãªéšåã¯æ¬¡ã®ããã«ãªããŸããã
æŽæ°åã®webpack.config.common.jsãã¡ã€ã«ã®å
容module.exports = { context: PATHS.root, target: 'web', entry, resolve: { extensions: ['.ts', '.js', '.json'], modules: [PATHS.src, PATHS.node_modules], }, module: { rules: [{ test: /\.ts$/, loaders: [{ loader: 'awesome-typescript-loader', options: { transpileOnly: process.env.NODE_ENV !== 'production' } }, 'angular2-template-loader', 'angular2-router-loader' ], exclude: [/\.(spec|e2e)\.ts$/], }, { test: /\.ts$/, include: [/\.(spec|e2e)\.ts$/], loaders: ['awesome-typescript-loader', 'angular2-template-loader'] }, { test: /\.json$/, use: 'json-loader' }, { test: /\.html$/, use: [{ loader: 'html-loader', }], }, { test: /\.(eot|woff|woff2|ttf|png|jpg|gif|svg|ico)(\?v=\d+\.\d+\.\d+)?$/, loader: 'file-loader', options: { context: PATHS.assets, name: '[path][name].[ext]' }, }, { test: /\.css$/, loader: extractSASS.extract({ fallback: 'style-loader', use: 'css-loader?sourceMap' }), exclude: [path.join(PATHS.projectPath), path.join(PATHS.src, 'common'), path.join(PATHS.src, 'common-bill')], }, { test: /\.css$/, include: [path.join(PATHS.projectPath), path.join(PATHS.src, 'common'), path.join(PATHS.src, 'common-bill')], use: [{ loader: "raw-loader"
ããã¯ãAngularããã¥ã¡ã³ã
angle.io/guide/webpackã§çŸåšèª¬æãããŠãããã®ãšéåžžã«äŒŒãŠããŸãã ãã®äžã§æãèå³æ·±ãã®ã¯ã.tsãã¡ã€ã«ã®ã³ã³ãã€ã«ã«é¢ããéšåã§ãã
{ test: /\.ts$/, loaders: [{ loader: 'awesome-typescript-loader', options: { transpileOnly: process.env.NODE_ENV !== 'production' } }, 'angular2-template-loader', 'angular2-router-loader' ], exclude: [/\.(spec|e2e)\.ts$/], }, { test: /\.ts$/, include: [/\.(spec|e2e)\.ts$/], loaders: ['awesome-typescript-loader', 'angular2-template-loader'] },
ã芧ã®ãšããã
angular2-template-loaderãš
angular2-router-loader loaderã䜿çšããŠãAngularã³ã³ããŒãã³ããæ§ç¯ããŸãã å
¬åŒææžã«ã¯ããæžãããŠããŸãã äž¡æ¹ã®ããŒããŒã¯AngularããŒã ã«ãã£ãŠæžãããŠããããGitHubã®ãŠãŒã¶ãŒãªããžããªã«ãããããããã¯éåžžã«å¥åŠã§ãã Angularãã¡ã€ã³ãã¬ãŒã ã¯ãŒã¯ãšããŠéžæããçç±ã®1ã€ã¯ãAngularãããŒãã¹ã¿ãŒãšããŠæ©èœããããšã§ããåãReactJSãšã¯ç°ãªãããã¹ãŠãç®±ããåºãŠããŸãã ããããããã§ã¯ããããžã§ã¯ãã®çµã¿ç«ãŠã«äœ¿çšããããŒã«ãããã«äœ¿çšã§ããããšã確èªããŠããŸãã
ãŸãã倧äžå€«ããã®ãããªæ§æã¯2çªç®ãã5çªç®ã®ããŒãžã§ã³ã§æ©èœããå¿é
ããçç±ã¯ãããŸããã§ããã ãããã1ã€ãããŸããã ng-conf 2017ã§ãBrad Greenã¯
BazelãšClosureã䜿çšããŠAngularã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšããããšã«ã€ããŠè©±ããŸããã Angularã®å€§èŠæš¡ãããžã§ã¯ãã§åããŠãã人ã¯ç§ãç解ããã ãã-ãã«ãã«ã¯éåžžã«é·ãæéãããã Angularã®5çªç®ã®ããŒãžã§ã³ãš2çªç®ã®webpackã§ã®éçºã¢ãŒãã®æåã®ãã«ãã«ã¯4å以äžããããŸãã ãŸãããã¬ãŒã ã¯ãŒã¯ã®éçºè
ãã¢ã»ã³ããªãé«éåãããšããèŠæã¯å®å
šã«æ£åœåãããŸãã ãã®ç¶æ³ã«ã¯å¥ã®èŠæ¹ããããŸããã ç§ã®ååãèšã£ãããã«ïŒ
ããã£ãããšçµã¿ç«ãŠããããã¬ãŒã ã¯ãŒã¯ãäœæãããããå éãå§ããªããã°ãªããŸããã§ãããã
AngularãããŒãžã§ã³6ã«ã¢ããã°ã¬ãŒããã
åœç€Ÿã¯ãããŒã«ãæŽæ°ããªããšäœãèµ·ããããããç解ããŠããŸãã ãããæçµçã«äœããããããã¯ããã£ãŠããŸãã é©åœã¯çã¿ã䌎ããã«è¡ãããããã§ã¯ãªããé²åã®éçããã©ã£ãŠåããäºæž¬ããæ¹ãããã§ãããã ãã®ãããAngular 6ã®å®å®ããŒãžã§ã³ã®ãªãªãŒã¹
ã«é¢ãããã¥ãŒã¹ããã£ããšãã«ããããžã§ã¯ããæŽæ°ããããšã«ããŸããã ããããããã¯çã¿ãªãããŸããããŸããã§ããã
åã®ããŒãžã§ã³ã®æŽæ°ãšåæ§ã«ã
update.angular.ioæŽæ°
ã¬ã€ãã䜿çšããŠãµã€ãã«ã¢ã¯ã»ã¹ããŸããã ããã§ç§ãã¡ã¯æåã®é©ããåŸ
ã£ãŠããŸããã
ãngUpgradeã䜿çšãé
ç®ãæå®ããªãå Žåã§ããããã¥ã¢ã«ã§ã¯
ng update @angular/core
ã³ãã³ãã®å®è¡ãææ¡ãããŸãã
ããã¯ä»¥åã®ããŒãžã§ã³ãæŽæ°ããå Žåã«ã¯åœãŠã¯ãŸããŸããã§ããããCLIãªãã§ã¢ããã°ã¬ãŒãããããšã¯äžå¯èœã§ããããšãããããŸããã ããããããã¯ãã°ã§ãããä¿®æ£ãããã§ãããããä»æ¥ã1é±éåã®ããã«ãCLIãªãã§æ確ãªæŽæ°æé ãååŸããããšã¯ã§ããŸããã§ããã
ç§ãã¡ã®ããã«ããããžã§ã¯ãã®æŽæ°ãç¶ãããå Žåã¯ãããããå°é£ãªéãå§ãŸããŸãã ãŸããæ¹åã決å®ããå¿
èŠããããŸãã
- CLIãã€ã³ã¹ããŒã«ããå
¬åŒã¬ã€ãã®æé ãæŽæ°ããŸãã
- ããã±ãŒãžãåå¥ã«æŽæ°ããæ§æãèªåã§ç·šéããŸãã
æåã®æ¹ãç°¡åã«æããã®ã§ãããã«æ²¿ã£ãŠé²ã¿ãŸããã
ããããã€ã³ã¹ããŒã«ãCLIã®æŽæ°ã
ng update @angular/core
ã³ãã³ãã®å®è¡åŸã倱æããŸããã
$ ng update @angular/core Package "@angular/compiler-cli" has an incompatible peer dependency to "typescript" (requires ">=2.7.2 <2.8", would install "2.8.3") Invalid range: ">=2.3.0 <3.0.0||>=4.0.0"
GitHubã®åé¡ã§ã¯ã
github.com / angular / angular-cli / issues / 10621ãèŠã€ããããšãã§ããŸãã ãããŸã§ã®ãšããããã®ãšã©ãŒã¯ä¿®æ£ãããŠããããã§ãïŒ
github.com/angular/devkit/pull/901ã«ãã
å€æ ïŒãããã®æç¹ã§æŽæ°ãŠãŒãã£ãªãã£ã®ãžã£ã³ã°ã«ã«å
¥ããããã±ãŒãžãæåã§æŽæ°ããªãããšã«ããŸããã
ããã±ãŒãžã®æŽæ°åŸããããžã§ã¯ãã¯éå§ãåæ¢ããŸããããå®éã«ã¯äºæãããŠããŸããã Angular 6ã¯Webpack 4ã䜿çšããŸãïŒCLIã䜿çšããŠã€ã³ã¹ããŒã«ããå Žåã«ç¢ºèªã§ããŸãïŒã ãã®ããã次ã®ã¹ãããã§ã¯ãWebpackããã³é¢é£ããã±ãŒãžãææ°ããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãããŸããã Webpackã®æŽæ°ã«é¢ãã話ã¯å¥ã®èšäºã«åºã¥ããŠãããããããã§ã¯
extract-text-webpack-pluginã䜿çš
ããå Žåã«ã®ã¿ããã
mini-css-extract-pluginã«çœ®ãæããŸããããã«ãããç¥çµãšåŒ·ããç¯çŽãããŸãã
ãã㧠ã4çªç®ã®Webããã¯ãã©ãã ãåªããŠããããå®éã«
ã¯ç§»è¡ã«é¢ããèšäºãèªãããšãã§ããŸãã
AngularãšWebpackã®æŽæ°ã«å ããŠãRxJSã6çªç®ã®ããŒãžã§ã³ã«æŽæ°ããå¿
èŠããããŸããããããªããšããããžã§ã¯ããéå§ãããŸããã ããã¯åææ¡ä»¶ã§ããããããå®çŸããããšã¯é£ãããããŸããã
移è¡ã®ããã¥ã¡ã³ãã«åŸãã ãã§ãã é倧ãªåé¡ãçºçããããšã¯ãããŸãããRxJSã¯ããããžã§ã¯ãã«å¿
èŠãªå€æŽãç¬èªã«è¡ããŠãŒãã£ãªãã£ãæäŸããŸãã
ãã®éãAngular 6ãžã®ã¢ããã°ã¬ãŒãã«æ»ããŸãããããžã§ã¯ãã¯ãŸã ãã«ããããŠããããå€ãã®äžæçãªãšã©ãŒãã¹ããŒãããŸãã ããã§ã.tsãã¡ã€ã«ãåŠçããããŒããŒã«æ³šæãæã£ãŠãã ããã
äžé£ã®angle2-template-loaderãš
angular2-router-loaderã䜿çšããŸãã
angular2-template-loaderãªããžããªã«ã¢ã¯ã»ã¹ãããšã1幎以äžæŽæ°ãããŠããªãããšãããããŸãïŒå
¬åŒããã¥ã¡ã³ãã§ã¯ãŸã 䜿çšããããã«æäŸãããŠããã®ã¯å¥åŠã§ãïŒã
åé¡ã¯ããã®ããŒããŒãã³ãŒããåŠçããæ¹æ³ã«ããããã§ãã 代æ¿åãæ¢ãå§ããAhead-of-TimeïŒAoTïŒã³ã³ãã€ã«
@ ngtools / webpackã®ãã©ã°ã€ã³ãèŠã€ããŸããã 以åã¯JITã³ã³ãã€ã«ã®ã¿ã䜿çšããŠãããããããã¯åçã®ä»£æ¿ã§ã¯ãããŸããã ããããäžæ¹ã§ãAngularããŒã ã¯ãããã©ã«ãã§AoTã³ã³ãã€ã«ãè¡ãèšç»ã«ã€ããŠé·ãé話ãåã£ãŠããŸããã @ ngtools / webpackã¯ã
Angular DevKitã®å
¬åŒããŒã«ã§ããã絶ããæŽæ°ãããŠããããã¬ãŒã ã¯ãŒã¯ã®6çªç®ã®ããŒãžã§ã³çšã«åèšèšãããŠããŸãã å
¬å¹³ãæãããã«ãangular2-template-loaderããã³angular2-router-loaderãã©ã°ã€ã³ã䜿çšããŠAngular 6ãããžã§ã¯ããæ§ç¯ã§ããããšã«æ³šæããŠãã ããã ãããã®ãã©ã°ã€ã³ã®æã¯éçºã«é©ããŠããå ŽåããããŸãããå®çšŒåã¢ã»ã³ããªã®å Žåã¯ãå®è¡å¯èœã³ãŒãã®è¿œå ãã§ãã¯ããªãããã䜿çšããªãæ¹ãè¯ãã§ãããã ãããã6çªç®ã®ããŒãžã§ã³ãžã®ç§»è¡ã«å¿
èŠãªãã¹ãŠã®ä¿®æ£ãããã«ãã£ããã§ããªãã£ãçç±ã§ãã
æŠããŠAOTã®ã³ã³ãã€ã«ã¯ããã³ãã¬ãŒãããŠãŒã¶ãŒã®ãã©ãŠã¶ã§èµ·åããåŸã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã®ã¢ã»ã³ããªæã«ã³ã³ãã€ã«ããããšããç¹ã§ç°ãªããŸãã äžæ¹ã§ã¯ãããã«ããã¢ããªã±ãŒã·ã§ã³ãé«éåããããµã€ãºãçž®å°ã§ããŸããä»æ¹ã§ã¯ãã³ã³ãã€ã«äžã«è¿œå ã³ã¹ããçºçããã³ã³ããŒãã³ãã®ããå³æ Œãªèšè¿°ãå¿
èŠã«ãªããŸãã
ãããžã§ã¯ãã®AOTã³ã³ãã€ã«ãžã®åãæ¿ãã¯ãå¥ã®å€§ããªã¿ã¹ã¯ã§ãã ãã®å®è£
ã®ããã«ããããžã§ã¯ãã®å€§éšåãããçŽãå¿
èŠããããŸããAOTã«ã¯éåžžã«å³ããã³ãŒãèŠä»¶ããããããããããã«éµå®ããªããã°å°é£ã«ãªãããã§ãã ãããã解決çã¯ãããŸãã JITã³ã³ãã€ã«ã§@ ngtools / webpackãã©ã°ã€ã³ã䜿çšã§ããŸãã ãããè¡ãã«ã¯ã
skipCodeGeneration=true
ãã©ã¡ãŒã¿ãŒããã©ã°ã€ã³èšå®ã«è¿œå ããŸãã
@ ngtools / webpackãã©ã°ã€ã³ã«åãæ¿ãããšãã«ä¿®æ£ããªããã°ãªããªãã£ãäž»ãªãã€ã³ãã®æŠèŠã説æããŸãã
- ãã³ãã¬ãŒãã§ã¯ã
private
å€æ°ã¯ãã¹ãŠpublic
眮ãæããããŸãã - ç¶æ¿ããå Žåã1ã€ã®ã³ã³ããŒãã³ããå¥ã®ã³ã³ããŒãã³ãããç¶æ¿ããããšã¯æãŸãããããŸããïŒãã£ã¬ã¯ãã£ãã¯åããã®ã䜿çšããŸãïŒã ååãšããŠãããã¯è«ççã§ãããangular2-template-loaderã¯ã¹ãããããã@ ngtools / webpackã¯èª€ã£ãŠäœæãããã¢ãžã¥ãŒã«ãèªãå§ããŸããã
- äžèšã®æšå¥šäºé
ãç¡èŠãããšãã³ã³ããŒãã³ãã³ã³ã¹ãã©ã¯ã¿ãŒã§åçŽåå€æ°ã䜿çšãããšãã«ãšã©ãŒãçºçããå¯èœæ§ããããŸãã ããã¯æãå¥åŠãªééãã§ãã ã³ã³ããŒãã³ãã¯æ¬¡ã®ãšããã§ãã
@Component({ selector: '[form-component]', template: '' }) export class FormComponent extends BaseComponent implements OnInit { constructor( public formService: FormService, public formFunc: string, public formParams: Array<any> = [] ) { super(); } ...
ãã°ã«ã¯ã次ã®ãããªãã®ããããŸãã
ERROR in : Can't resolve all parameters for FormComponent in form.component.ts: ( [object Object], ?, ?)
ã«ãŒã«2ã«åŸãããšããå§ãããŸãããäœããã®çç±ã§ãããããŸããããªãå Žåã¯ã
httpsïŒ//stackoverflow.com/a/48748942/4778628ã®å°ããªããã¯ãäœæããäžèšã®ã³ãŒãã次ã®ããã«çœ®ãæããŸãã
@Component({ selector: '[form-component]', template: '' }) export class FormComponent extends BaseComponent implements OnInit { constructor( public formService: FormService, @Inject('') public formFunc: string, @Inject('') public formParams: Array<any> = [] ) { super(); } ...
æ®å¿µãªããããšã©ãŒã¯ããã§çµãããŸããã§ãã
ãAngularã³ã³ãã€ã©ãã©ã°ã€ã³èªäœã§ååŸããŸããã
ãšã©ãŒããã¹ã [0] building modules wds: Project is running at http://localhost:8080/ wds: webpack output is served from / wds: Content not from webpack is served from /home/dsumbaev/DEVELOPMENT/bill-client-front/dist wds: 404s will fallback to /index.html [0] building modules/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:509 if (this.done && (request.request.endsWith('.ts') ^ TypeError: Cannot read property 'request' of null at nmf.hooks.beforeResolve.tapAsync (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:509:47) at _fn1 (eval at create (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/webpack/node_modules/tapable/lib/HookCodeFactory.js:24:12), <anonymous>:27:1) at Object.resolveWithPaths (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/@ngtools/webpack/src/paths-plugin.js:14:9) at nmf.hooks.beforeResolve.tapAsync (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/@ngtools/webpack/src/angular_compiler_plugin.js:521:32) at AsyncSeriesWaterfallHook.eval [as callAsync] (eval at create (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/webpack/node_modules/tapable/lib/HookCodeFactory.js:24:12), <anonymous>:19:1) at NormalModuleFactory.create (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/webpack/lib/NormalModuleFactory.js:338:28) at semaphore.acquire (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/webpack/lib/Compilation.js:494:14) at Semaphore.acquire (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/webpack/lib/util/Semaphore.js:17:4) at asyncLib.forEach (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/webpack/lib/Compilation.js:492:15) at arrayEach (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/neo-async/async.js:2400:9) at Object.each (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/neo-async/async.js:2835:9) at Compilation.addModuleDependencies (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/webpack/lib/Compilation.js:471:12) at Compilation.processModuleDependencies (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/webpack/lib/Compilation.js:450:8) at afterBuild (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/webpack/lib/Compilation.js:556:15) at buildModule.err (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/webpack/lib/Compilation.js:600:11) at callback (/home/dsumbaev/DEVELOPMENT/bill-client-front/node_modules/webpack/lib/Compilation.js:358:35)
æåã¯ãnode_modulesããã³ã³ãã€ã©ããã±ãŒãžãæäŸããŠãããšèããŠããããã圌ã¯ããããåŠçã§ããŸããã§ããããäŸå€ãè¿œå ããŠããšã©ãŒã«ã¯åœ±é¿ããŸããã§ããã é
ããŠè¡ãå Žæããªãã£ãããã@ ngtools / webpackã«
å°ããªPRãç»å ŽããŸããã ãããã®å€æŽã¯ãããã±ãŒãžã®ããŒãžã§ã³6.0.1ã«å«ãŸããŠããŸãã ãã®åŸãã¢ã»ã³ããªãæåãããããžã§ã¯ããéå§ãããŸããïŒ
ãããïŒ ã¡ã€ã³ã¢ãžã¥ãŒã«ä»¥å€ã®ãã¹ãŠã®ã¢ãžã¥ãŒã«ããã«ã¢ããããªãããšãå€æããŸããã @ ngtools / webpackãã©ã°ã€ã³ã®ã»ããã¢ãããèŠãŠã¿ãŸãããã
new AngularCompilerPlugin({ platform: 0, sourceMap: true, tsConfigPath: path.join(PATHS.root, 'tsconfig.json'), skipCodeGeneration: true, })
äžèŠãããšããããã¹ãŠã
ããã¥ã¡ã³ãã®ãšããã§ãã entryModuleãã©ã¡ãŒã¿ãŒã¯ãªãã·ã§ã³ãšããŠããŒã¯ãããŠããããšã«æ³šæããŠãã ããã è©Šè¡é¯èª€ã«ãã£ãŠããã©ã¡ãŒã¿ãŒãæå®ãããŠããªãå Žåãã¢ã»ã³ããªãã¡ã€ã³ã¢ãžã¥ãŒã«ããå
ã«é²ãŸãªãããšãããããŸãããããããã¢ããªã±ãŒã·ã§ã³ãåäœäžèœã«ãªã£ãçç±ã§ãã åé¡ã
entryModule
ã®ã¯ç°¡åã§ã
entryModule
ãè¿œå ããå¿
èŠããããŸãã
new AngularCompilerPlugin({ platform: 0, entryModule: path.join(PATHS.src, 'apps/client/app/app.module#AppModule'), sourceMap: true, tsConfigPath: path.join(PATHS.root, 'tsconfig.json'), skipCodeGeneration: true, })
èŠããŠããå Žåãæåã«ãããžã§ã¯ãã«2ã€ã®ãµããããžã§ã¯ããããããšãæžããŸããããentryModuleã«ã¯1ã€ããæå®ã§ããŸããã 2çªç®ã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯ãã¹ããããã¢ãžã¥ãŒã«ãå«ãŸããŠããªããããããã§ã¯å¹žéã§ãã å¥ã®ç¶æ³ãããå ŽåïŒ1ã€ã®å
éšã«ããã€ãã®è€éãªãããžã§ã¯ããããå Žåã¯ãããããã«åå¥ã®æ§æãäœæãããã
ãã®PRãAngular DevKitãªããžããªã«æž¡ãããã®ãåŸ
ã€å¿
èŠããããŸãã
ãã®çµæããããžã§ã¯ãã®æ§æã®äžè¬çãªéšåã¯æ¬¡ã®ãšããã§ããã
webpack.config.common.jsãã¡ã€ã«ã®åèšå
容 const path = require('path'); const merge = require('webpack-merge'); const webpack = require('webpack'); const ProgressPlugin = require('webpack/lib/ProgressPlugin'); const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const {AngularCompilerPlugin} = require('@ngtools/webpack'); const { PATHS, PARAMS } = require('./helpers.js'); const devMode = process.env.NODE_ENV === 'development'; let entry = { 'polyfills': path.join(PATHS.src, 'polyfills.browser.ts'), 'main': path.join(PATHS.projectPath, 'main.ts'), 'extform': path.join(PATHS.apps, 'extform/main.ts'), 'style': path.join(PATHS.assets, 'sass', 'app.sass') }; PARAMS.themes.forEach(theme => { entry['themes/' + theme + '/theme'] = path.join(PATHS.themes, theme, 'theme.scss') }); module.exports = { context: PATHS.root, target: 'web', entry, resolve: { extensions: ['.ts', '.js', '.json'], modules: [PATHS.src, PATHS.node_modules], }, mode: process.env.NODE_ENV, stats: 'errors-only', module: { rules: [{ test: /\.ts$/, loader: '@ngtools/webpack', exclude: [/\.(spec|e2e)\.ts$/, /node_modules/], }, { test: /\.ts$/, loader: 'null-loader', include: [/\.(spec|e2e)\.ts$/], }, { test: /\.json$/, use: 'json-loader' }, { test: /\.html$/, use: [{ loader: 'html-loader', }], }, { test: /\.(eot|woff|woff2|ttf|png|jpg|gif|svg|ico)(\?v=\d+\.\d+\.\d+)?$/, loader: 'file-loader', options: { context: PATHS.assets, name: '[path][name].[ext]' }, }, { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, "css-loader" ], exclude: [path.join(PATHS.projectPath), path.join(PATHS.src, 'common'), path.join(PATHS.src, 'common-bill')], }, { test: /\.css$/, include: [path.join(PATHS.projectPath), path.join(PATHS.src, 'common'), path.join(PATHS.src, 'common-bill')], use: [{ loader: "raw-loader"
ãããã«
äžèšã®ãã¹ãŠã®æäœã®åŸãAngular 6ãšç¬èªã®Webpack configã䜿çšããŠåäœããã¢ããªã±ãŒã·ã§ã³ãååŸããŸããã äœæ¥äžã«180ã®ãããžã§ã¯ããã¡ã€ã«ã調æŽãããçŽ1é±éããããŸããã
Angularã¯ã¢ããªã·ãã¯ãã¬ãŒã ã¯ãŒã¯ã§ããã6çªç®ã®ããŒãžã§ã³ã®ç»å Žã«ãããããã¯ããã«ç®ç«ã€ããã«ãªããŸããã çŸåšãã«ãŒã¿ãŒãŸãã¯HTTPãªã¯ãšã¹ãã®ã©ã€ãã©ãªã®åœ¢åŒã®è¿œå ããŒã«ã ãã§ãªããã¢ã»ã³ããªããŒã«ãæšæºè£
åãããŠããŸãã ãããŠãAngularã®éçºè
ãæå³ããŠããªãå€æŽãå ããªãã§ãã ããã ãã®å Žåã«ã®ã¿ããããžã§ã¯ããç°¡åã«æŽæ°ã§ãããããããæŽæ°åŸã«æ°çŸã®ãã¡ã€ã«ãå€æŽããå¿
èŠã¯ãããŸããã ããã§ãªããã°ãå°é£ãªéãããªããåŸ
ã£ãŠãããããªãã¯ä»è
ã®è¯å®çã§äžè¬çãªåã³ã®æµ·ã§
æ°ããããŒãžã§ã³ã®åŠå®çãªã¬ãã¥ãŒã奜ãå¿
èŠããããŸãã
ããã¯ãAngularãæªãããšãè¯ãããšãæå³ãããã®ã§ã¯ãªããç¹å¥ãªåŠçãå¿
èŠãªã ãã§ã誰ã«ãé©ããŠããŸããã CLIã䜿çšããŠäœæ¥ãããŠãŒãã£ãªãã£ã䜿çšããŠngãããžã§ã¯ããã¢ã»ã³ãã«ãããã®ããã®ã¢ãžã¥ãŒã«ãšã³ã³ããŒãã³ãããã¹ãããã³äœæããã°ãæºè¶³ã§ãã ç§ãã¡ã®ããŒã ã§ããããæãã§ããŸãããæ®å¿µãªããšã«ãWebpackã®èšå®ã«æ¢ã«ããŸãã«ãå€ãã®ãã®ãé¢ä¿ããŠããŸãã è¯ããã·ã¢ã®ããšããã«ããããã«ããããããªããã©ãã«èœã¡ããç¥ã£ãŠããããç§ã¯ã¹ãããŒãæ·ãã§ããããã 1幎åãAngularãããžã§ã¯ãã§ã¯CLIã¯ãã®ãããªå¿
é ããŒã«ã§ã¯ãããŸããã§ããããä»æ¥ã§ã¯æŽæ°ã«é¢ããããã¥ã¡ã³ãã§ããCLIãªãã§æŽæ°ããæ¹æ³ã«é¢ããã¬ã€ãã¯ãããŸããã