美文网首页我爱编程
@angular/cli 环境搭建

@angular/cli 环境搭建

作者: H_DaYan | 来源:发表于2018-05-26 21:45 被阅读0次

    1. 环境需要

    node版本要求8.x及以上,typescript、python2的环境

    2. ng new project后,npm install会遇到一个问题

    node-sass会安装失败,解决方案如下(3选1即可):

    a. 可以使用cnpm进行install(速度相对快);

    b. 要不就把npm的registry改为淘宝镜像(npm config set "registry=https://registry.npm.taobao.org");

    c. 或者在.npmrc中添加(sass_binary_site=https://npm.taobao.org/mirrors/node-sass/),将下载路径指向淘宝。

    3. 如何添加hmr

    3.1. add environment.hmr.ts
    export const environment = {
        production: false,
        hmr: true
    };
    
    3.2 modify environment.prod.ts
    export const environment = {
        production: true,
    +   hmr: false
    };
    
    3.3 modify environmonent.ts
    export const environment = {
        production: false,
    +   hmr: false
        };
    
    3.4 modify angular.json
    "architect": {
            "build": {
              "builder": "@angular-devkit/build-angular:browser",
              "options": {
                "outputPath": "dist/angular6",
                "index": "src/index.html",
                "main": "src/main.ts",
                "polyfills": "src/polyfills.ts",
                "tsConfig": "src/tsconfig.app.json",
                "assets": [
                  "src/favicon.ico",
                  "src/assets"
                ],
                "styles": [
                  "src/styles.css"
                ],
                "scripts": []
              },
              "configurations": {
                "production": {
                  "fileReplacements": [
                    {
                      "replace": "src/environments/environment.ts",
                      "with": "src/environments/environment.prod.ts"
                    }
                  ],
                  "optimization": true,
                  "outputHashing": "all",
                  "sourceMap": false,
                  "extractCss": true,
                  "namedChunks": false,
                  "aot": true,
                  "extractLicenses": true,
                  "vendorChunk": false,
                  "buildOptimizer": true
                },
    +           "hmr": {
    +             "fileReplacements": [
    +               {
    +                 "replace": "src/environments/environment.ts",
    +                 "with": "src/environments/environment.hmr.ts"
    +               }
    +             ]
    +           }
    
    "serve": {
        "builder": "@angular-devkit/build-angular:dev-server",
        "options": {
        "browserTarget": "angular6:build"
        },
        "configurations": {
            "production": {
                "browserTarget": "angular6:build:production"
            },
    +      "hmr": {
    +           "browserTarget": "angular6:build:hmr"
    +       }
        }
        },
    
    3.5 安装相关依赖

    npm install --save-dev @angularclass/hmr
    npm install --save-dev @types/webpack-env
    npm install --save-dev typescript

    3.6 add src/hmr.ts
    import { NgModuleRef, ApplicationRef } from '@angular/core';
    import { createNewHosts } from '@angularclass/hmr';
    
    export const hmrBootstrap = (module: any, bootstrap: () => Promise<NgModuleRef<any>>) => {
      let ngModule: NgModuleRef<any>;
      module.hot.accept();
      bootstrap().then(mod => ngModule = mod);
      module.hot.dispose(() => {
        const appRef: ApplicationRef = ngModule.injector.get(ApplicationRef);
        const elements = appRef.components.map(c => c.location.nativeElement);
        const makeVisible = createNewHosts(elements);
        ngModule.destroy();
        makeVisible();
      });
    };
    
    3.7 modify src/main.ts
    import { AppModule } from './app/app.module';
     import { environment } from './environments/environment';
     
    +import { hmrBootstrap } from './hmr';
    +
     if (environment.production) {
       enableProdMode();
     }
     
    -platformBrowserDynamic().bootstrapModule(AppModule)
    -  .catch(err => console.log(err));
    +const bootstrap = () => platformBrowserDynamic().bootstrapModule(AppModule);
    +console.log(environment)
    +if (environment.hmr) {
    +  if (module[ 'hot' ]) {
    +    hmrBootstrap(module, bootstrap);
    +  } else {
    +    console.error('HMR is not enabled for webpack-dev-server!');
    +    console.log('Are you using the --hmr flag for ng serve?');
    +  }
    +} else {
    +  bootstrap();
    +}
    
    3.8 add src/typings.d.ts
    ///<reference types="webpack-env" />
    
    3.9 运行npm run hmr

    modify package.json

    "scripts": {
        "ng": "ng",
        "start": "ng serve",
        "build": "ng build",
        "test": "ng test",
        "lint": "ng lint",
    -   "e2e": "ng e2e"
    +   "e2e": "ng e2e",
    +   "hmr": "ng serve --hmr --configuration hmr"
    },
    
    3.10 链接

    GitHub - hyysb/angular6: angular6(angular网站)
    官方github提供的方法,一直热更新会有问题,方案来源HMR Story Update for 6rc2 #10268

    相关文章

      网友评论

        本文标题:@angular/cli 环境搭建

        本文链接:https://www.haomeiwen.com/subject/xqlvjftx.html