-
Notifications
You must be signed in to change notification settings - Fork 1
Tips and Tricks
- Utiliser une version plus à jour (ou spécifique) de itowns
- Extension itowns du Geoportail avec webpack
Au lieu de faire l'habituel
npm install itowns --savepour 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 packce 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.tgzNe 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 --saveDans 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"
}}Si on utilise le module npm via :
npm install geoportal-extensions-itowns --saveEt 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