arcgis api for javascript: advanced...

23
Andy Gup & John Gravois ArcGIS API for JavaScript Advanced Topics

Upload: dangphuc

Post on 26-May-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Andy Gup & John Gravois

ArcGIS API for JavaScript

Advanced Topics

Page 2: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

ArcGIS API for JavaScript 4.x

• Modern architecture

• Better control over application life-cycle

• Stronger infrastructure for building larger apps

Page 3: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Working with Modern JavaScript –2017+

• Stepping beyond plain ol’ JavaScript

• ES2015, Node.js, Webpack, TypeScript, etc etc

• Transpilers, module loaders, task runners, etc

Page 4: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Getting to know modern JavaScript…

Page 5: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Almost all modern JavaScript apps use a framework

Page 6: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

The Good News…

A variety of solutions available on github!

Page 7: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

A partial list…

• https://github.com/Esri/angular-esri-map

• https://github.com/jwasilgeo/angular2-esri-playground

• https://github.com/Esri/esri-system-js

• https://github.com/lobsteropteryx/esri-webpack-typescript

Page 8: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Two main approaches

Dedicated module loader

Exclude and Require

Page 9: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

What are modules?

• Different types: AMD, ES6, commonjs, etc

• Reusable chunk of JavaScript

• Logically encapsulate functionality

• Sometimes referred to as JS libraries

Page 10: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Example: AMD Modules

Page 11: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Module Loaders

Dojo uses an AMD module loader

Other frameworks use a variety of module loaders: e.g. webpack, SystemJS, RequireJS…

Page 12: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Dedicated module loader

Example usage: Angular + webpack

• Use esriLoader or angular2-esri-loader

• Inject ArcGIS JS API as a <script>

• Thin wrapper around global require()

• Allows for lazy loading ArcGIS modules

Page 13: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about
Page 14: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Dedicated Module Loader

Examples

• https://github.com/Esri/angular-esri-map

• https://github.com/tomwayson/esri-loader

Page 15: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Dedicated module loader

Advantages:

- Sandboxes ArcGIS module dependencies

- Only load ArcGIS modules on routes that require it

Page 16: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Dedicated module loader

Challenges:

- Uses global require()

- Requires knowledge about ArcGIS JS API module loading

- Can’t use ES6 import statements

Page 17: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Exclude and Require

Example usage: Angular + Webpack

• Configure module loader to exclude ArcGIS Dojo modules

• Configure module loader to output AMD bundles

• Load ArcGIS JS API via a <script> tag

• Use ArcGIS JS API Dojo loader to require()bundles

Page 18: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about
Page 19: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Exclude and Require

Examples

• https://github.com/tomwayson/angular2-esri-example

• https://github.com/lobsteropteryx/esri-webpack-typescript

Page 20: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Exclude and Require

Advantages:

- You can use ES2015 imports and commonjs

- No need for async callbacks or Promises to load ArcGIS modules

Page 21: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about

Exclude and Require

Challenges:

- Can introduce map loading delays

- Also uses global require()

Page 22: ArcGIS API for JavaScript: Advanced Topicsproceedings.esri.com/library/userconf/devsummit-dc17/...Dedicated module loader Challenges: - Uses global require() - Requires knowledge about