Skip to content

Tips and Tricks

ilokhat edited this page Jul 27, 2018 · 7 revisions


Utiliser une version plus à jour (ou spécifique) de itowns que celle présente dans les dépôts npm

Au lieu de faire l'habituel

npm install itowns --save

pour télécharger la version la plus récente déployée du package, on va plutôt d'abord cloner le dépôt itowns (et éventuellement se placer sur la branche qui nous intéresse), puis à la base du répertoire, on va lancer npm pack

git clone https://github.com/iTowns/itowns.git
cd itowns
npm install && npm run prepublishOnly
npm pack

ce qui aura pour effet de créer une archive (tarball en .tgz) avec un nom comme itowns-2.3.0.tgz

On peut ensuite dans notre projet installer cette version d'itowns directement du tarball :

npm install /chemin/vers/itowns-2.3.0.tgz

Ne pas oublier d'installer les dépendances d'itowns également :

npm install proj4 --save
npm install three@0.89.0 --save
npm install three.meshline --save

Dans le package.json de notre projet la dépendance à itowns aura alors la forme file:fichier.tgz :

...
  },
  "dependencies": {
    "itowns": "file:itowns-2.3.0.tgz",
    "proj4": "^2.4.4",
    "three": "^0.89.0",
    "three.meshline": "^1.0.3"
  }}

Utiliser l'extension itowns du Geoportail dans un projet node/webpack

Si on utilise le module npm via :

npm install geoportal-extensions-itowns --save

Et qu'on essaye de le bundler avec webpack (comme décrit ici), on aura une erreur indiquant un module manquant (request). On pourra modifier le fichier webpack.config.js de la manière suivante pour que ça fonctionne :

const path = require('path');
module.exports = {
    externals : {
        request : {
            commonjs2 : "request",
            commonjs : "request",
            amd : "require"
        },
        xmldom : {
            commonjs2 : "xmldom",
            commonjs : "xmldom",
            amd : "require"
        }
    },
    entry: './src/main.js',
    output: {
        path: path.resolve(__dirname, "dist"),
        filename: 'bundle.js'
    },
};

On l'importera de la manière habituelle dans le code, en sachant que (pour l'instant ?) le module surcharge un objet itowns global, qu'on a pas besoin d'importer explicitement du coup :

import Gp from 'geoportal-extensions-itowns'

/*...
  ...
*/
let positionOnGlobe = { longitude: 2.46315, latitude: 48.819609, altitude: 5500 };
let viewerDiv = document.getElementById('viewerDiv');
const globeView = new itowns.GlobeViewExtended(viewerDiv, positionOnGlobe);
/*...
  ...
*/

On pourra voir les exemples sur le dépôt de l'extension ici

Clone this wiki locally