天天看點

ArcGIS API for JavaScript與 npm

在4.7版本中,不僅增加了WebGL的渲染支援(渲染前端速度加快,渲染量也加大)、增強了ES6中的Promises文法支援,還支援了npm管理及webpack打包,實屬喜訊。

“意味着可以不經過esri-loader這個包來引入JsAPI了——ArcGIS極客說”

//目前未完待續

1. 前言

如果你想本地組織起ArcGIS API for JavaScript項目,那麼從4.7開始,就可以用npm這個當下火熱的前端js包管理工具進行項目中的API管理了。

以前Esri是推薦用bower這個包管理工具的,現在推薦使用npm了,當然現在仍然能用bower,不過還是推薦用npm。

事先,你可能需要安裝:

  • node.js
  • git
  • grunt
  • java 7或更高版本

事實上,你隻需要安裝node.js即可。其他三個可以根據需要安裝。

當然,仍然可以使用IIS或Tomcat本地部署的方式進行開發,看工程需要。

2. 如何安裝

一行代碼

npm install arcgis-js-api --save
或
npm install arcgis-js-api
或
npm i arcgis-js-api      

如果下載下傳完成,node_modules檔案夾内應該會出現這樣的檔案夾清單:

ArcGIS API for JavaScript與 npm

測試得出:最好結合VPN下載下傳,npm牆比較高,下載下傳較慢(本人實測大概510+s),而且下載下傳的體積較大(130+MB),下下來的都是未經壓縮的源碼。

3. 配置

以下為配置dojoConfig的有關代碼。

ArcGIS API for JavaScript與 npm
ArcGIS API for JavaScript與 npm
// create or use existing global dojoConfig
var dojoConfig = this.dojoConfig || {};

(function() {
  var config = dojoConfig;

  // set default properties
  if (!config.hasOwnProperty("async")) {
    config.async = true;
  }

  // add packages for libs that are not siblings to dojo
  (function() {
    var packages = config.packages || [];

    function addPkgIfNotPresent(newPackage) {
      for (var i = 0; i < packages.length; i++) {
        var pkg = packages[i];
        if (pkg.name === newPackage.name) {
          return;
        }
      }

      packages.push(newPackage);
    }
    addPkgIfNotPresent({
      name: "app",
      location: "./../../src/app"
    });
    addPkgIfNotPresent({
      name: "esri",
      location: "../arcgis-js-api"
    });
    addPkgIfNotPresent({
      name: "@dojo",
      location: "../@dojo"
    });
    addPkgIfNotPresent({
      name: "cldrjs",
      location: "../cldrjs",
      main: "dist/cldr"
    });
    addPkgIfNotPresent({
      name: "globalize",
      location: "../globalize",
      main: "dist/globalize"
    });
    addPkgIfNotPresent({
      name: "maquette",
      location: "../maquette",
      main: "dist/maquette.umd"
    });
    addPkgIfNotPresent({
      name: "maquette-css-transitions",
      location: "../maquette-css-transitions",
      main: "dist/maquette-css-transitions.umd"
    });
    addPkgIfNotPresent({
      name: "maquette-jsx",
      location: "../maquette-jsx",
      main: "dist/maquette-jsx.umd"
    });
    addPkgIfNotPresent({
      name: "tslib",
      location: "../tslib",
      main: "tslib"
    });

    config.packages = packages;
  })();

  // configure map.globalize
  var map = config.map || {};
  if (!map.globalize) {
    map.globalize = {
      "cldr": "cldrjs/dist/cldr",
      "cldr/event": "cldrjs/dist/cldr/event",
      "cldr/supplemental": "cldrjs/dist/cldr/supplemental",
      "cldr/unresolved": "cldrjs/dist/cldr/unresolved"
    };
    config.map = map;
  }
})();      

配置dojoConfig