Updating an ADF project from version 1.3/1.4 to 1.5

Document created by eugenio_romano Employee on Jun 9, 2017
Version 1Show Document
  • View in full screen mode

In this Tutorial, I would help you to update your project created with the ADF Yeoman app generator. Many people have asked on our gitter channel which are the correct steps to update from versions 1.3.0/1.4.0 to version 1.5.0.

In order to understand the possible ways to update a project I did some different experiments with old projects and I finally find out the following two different approaches:

  1. Automatic update of the project using the Yeoman Generator.

  2. Manually update the project.

If you are not using a versioning system on your project I suggest you to execute backup copy of it before to following one of this approach. 

1. Automatic update of the project using the Yeoman Generator

If your application is mainly just the output of the generated app, you can try to follow those steps:

  • Update the Yeoman generator to version 1.5.0.
npm uninstall -g generator-ng2-alfresco-app
npm install -g generator-ng2-alfresco-app

 

  • Run the new yeoman app generator.
yo ng2-alfresco-app

 

  • Clean your old distribution and dependencies.
npm run clean

 

  • Install the dependencies.
npm install

 

At this point, the generator could have maybe overwritten some of your changes. Remember to check the differences with the original source code (this is one of the reasons you should use a versioning system) and, if this is the case, retrofit the changes. Once done, it's time to start the application using the npm run start command.

After starting the app, if everything is working fine, that's all and you don't need to do anything else. On the contrary, if you have bugs and nothing really work, recover the original version of the project and try the manual approach.   

2. Manually update the project 

Considering that a project generated using the scaffolder is probably customized, its automatic update could not be an option. The following method is more chirurgical and would request a bit of elbow grease. Here (in a gist repository) you can find all the following modifications to the source code.

As an example, let's use one of the ADF examples, more, in particular, the project named custom columns on content made using the ADF version 1.3.0 (by Francesco Corti Thank You ). To see in detail all the cahnges that I made you can refer here

The files modified during the manual update are:

 

Below a brief description of the changes for each file.

 

Modify package.json

 

In the package.json file are specified all the versions of the npm packages used by your project. In this file, you will find two different sections: the development dependencies and the project dependencies. For more information about package.json you can refer to the NPM official documentation.

 

To update the project, modify the following dependencies to the new version.

 

    "@angular/animations": "~4.0.0",
    "@angular/common": "~4.0.0",
    "@angular/compiler": "~4.0.0",
    "@angular/core": "~4.0.0",
    "@angular/forms": "~4.0.0",
    "@angular/http": "~4.0.0",
    "@angular/platform-browser": "~4.0.0",
    "@angular/platform-browser-dynamic": "~4.0.0",
    "@angular/router": "~4.0.0",
    "@angular/compiler-cli": "~4.0.0",
    "@angular/material": "2.0.0-beta.1",

    "alfresco-js-api": "~1.5.0",
    "ng2-activiti-analytics": "1.5.0",
    "ng2-activiti-diagrams": "1.5.0",
    "ng2-activiti-form": "1.5.0",
    "ng2-activiti-processlist": "1.5.0",
    "ng2-activiti-tasklist": "1.5.0",
    "ng2-alfresco-core": "1.5.0",
    "ng2-alfresco-datatable": "1.5.0",
    "ng2-alfresco-documentlist": "1.5.0",
    "ng2-alfresco-login": "1.5.0",
    "ng2-alfresco-search": "1.5.0",
    "ng2-alfresco-tag": "1.5.0",
    "ng2-alfresco-social": "1.5.0",
    "ng2-alfresco-upload": "1.5.0",
    "ng2-alfresco-userinfo": "1.5.0",
    "ng2-alfresco-viewer": "1.5.0",
    "ng2-alfresco-webscript": "1.5.0",

    "reflect-metadata": "0.1.9",
    "rxjs": "5.1.0",
    "zone.js": "0.8.11",
    "dialog-polyfill": "^0.4.7",
    "ng2-translate": "5.0.0"

 

Once done, update the following development dependencies to the following versions.

 

   "awesome-typescript-loader": "3.1.3",
   "typescript": "2.0.3"

 

Modify tsconfig.json

 

The tsconfig.json file specifies the root files and the compiler options required to compile the project. You need to completely replace your currently tsconfig.json with the new below tsconfig.json. For more information about this file, you can refer to the official typescript documentation.

 

 

{
  "compilerOptions": {
    "baseUrl": ".",
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "skipLibCheck": true,
    "noLib": false,
    "allowUnreachableCode": false,
    "allowUnusedLabels": false,
    "noImplicitAny": false,
    "noImplicitReturns": false,
    "noImplicitUseStrict": false,
    "noFallthroughCasesInSwitch": true,
    "removeComments": true,
    "declaration": true,
    "outDir": "./dist",
    "lib": [
      "es2015",
      "dom"
    ],
    "suppressImplicitAnyIndexErrors": true
  },
  "exclude": [
    "demo",
    "node_modules",
    "dist"
  ],
  "angularCompilerOptions": {
    "strictMetadataEmit": false,
    "skipTemplateCodegen": true
  }
}

 

Modify app.modules.ts

 

In the app.modules.ts class is described how the application parts fit together. Every application has at least one Angular module, the root module that you bootstrap to launch the application. Because we started to move from material design lite to the official @angular material components library, you need to import it inside your modules.

 

import { MaterialModule } from '@angular/material';

@NgModule({
   imports: [
       ......
       MaterialModule.forRoot()
   ],
   declarations: [
      ......
   ],
   providers: [.....],
   bootstrap: [.....]
})

 

Modify webpack.dev.js and webpack.prod.js

 

This two files are in your config folder and are used to configure your Webpack build. For more information about Webpack refer to the official documentation.

In webpack.dev.js and webpack.prod.js you should have in the plugins section the CopyWebpackPlugin add the following configurations in the array of both files.

module.exports = {
    ......
    ......
    plugins: [
      new CopyWebpackPlugin([
        .....
        .....
        {
           context: 'node_modules',
           from: 'ng2-activiti-*/bundles/assets/images/*.*',
           to: 'assets/images',
           flatten: true
        },
        {
           context: 'node_modules',
           from: 'ng2-alfresco-*/
bundles/assets/images/*.*',
           to: 'assets/images',
           flatten: true
        }
        ]),

        ....
        ....
    ]
}

 

After all these changes, it is suggested to execute the following commands.

 

  • Clean your old distribution and dependencies.
npm run clean

 

  • Install the dependencies.
npm install

 

That's all! Now you can start again your project, as usual using npm run start.

 

If everything is working fine: well done! You project is correctly updated to the new ADF version.

If not, feel free to reply here or contact us on gitter or raising a question in the Application Development Framework space.

Attachments

    Outcomes