Questo articolo mostra come inserire three.js in un ambiente [link:https://nodejs.org/en/ node.js] così che tu possa eseguire test automatici. I test possono essere eseguiti da linea di comando o da strumenti CI automatici come [link:https://travis-ci.org/ Travis].
Se sei a tuo agio con node e npm, installa npm
$ npm install three --save-dev
e aggiungi
const THREE = require('three');
al tuo test.
Se non sei familiare con questi strumenti, ecco una guida rapida per linux (il processo di installazione sarà leggermente diverso usando Windows, ma i comandi NPM saranno uguali).
$ sudo apt-get install -y npm nodejs-legacy
# fix any problems with SSL in the default registry URL
$ npm config set registry http://registry.npmjs.org/
$ mkdir test-example; cd test-example
$ npm init
e accetta tutti i valori suggeriti premendo Enter per ogni richiesta.
Con queste richieste si creerà il file package.json.
$ npm test
fallirà, come ci aspettiamo. Se controlli nel file package.json la
definizione dello script di test è:
"test": "echo \"Error: no test specified\" && exit 1"
$ npm install mocha --save-dev
Si noti che è stata creata la cartella node_modules/ e le tue
dipendenze sono state installate al suo interno. Inoltre, si noti che
il file package.json è stato aggiornato: è stata aggiunta la proprietà
devDependencies, aggiornata dal comando --save-dev.
"test": "mocha --reporter list"
$ npm test
Adesso il test dovrebbe essere eseguito con successo, riportando "0 passing (1ms) or
similar".
$ npm install three --save-dev
$ npm show three versions
per vedere quali sono le versioni disponibili. Per dire ad npm la versione
scelta, usa
$ npm install three@0.84.0 --save
(0.84.0 nell'esempio). --save fa sì che sia una dipendenza del
progetto piuttosto che una devDependecy. Per maggiori informazioni
consulta il documento
[link:https://docs.npmjs.com/cli/v8/configuring-npm/package-json qui].
$ mkdir test
const THREE = require('three');
const assert = require('assert');
describe('The THREE object', function() {
it('should have a defined BasicShadowMap constant', function() {
assert.notEqual('undefined', THREE.BasicShadowMap);
}),
it('should be able to construct a Vector3 with default of x=0', function() {
const vec3 = new THREE.Vector3();
assert.equal(0, vec3.x);
})
})
The THREE object should have a defined BasicShadowMap constant: 0ms
The THREE object should be able to construct a Vector3 with default of x=0: 0ms
2 passing (8ms)
Il punto 2 e 3 saranno molto dipendenti da come hai gestito il tuo codice. Nell'esempio di Physics.js fornito sopra, la parte di esportazione si trova giustamente alla fine. Assegniamo un oggetto a module.exports:
//=============================================================================
// make available in nodejs
//=============================================================================
if (typeof exports !== 'undefined') { module.exports = Physics; }
Se stai già utilizzando qualcosa di smart come require.js o browserify, salta questa parte.
Tipicamente un progetto three.js verrà eseguito nel browser. Il caricamento del modulo viene quindi eseguito dal browser che esegue una serie di tag di script. I tuo singoli file non si devono preoccupare per le dipendenze. Tuttavia, in un contesto nodejs non è presente il file index.html che lega tutto insieme, quindi devi essere esplicito.
Se stai esportando un modulo che dipende da altri file, dovrai dire a node di caricarli. Di seguito un approccio:
//=============================================================================
// setup for server-side testing
//=============================================================================
if (typeof require === 'function') // test for nodejs environment {
const THREE = require('three'); const MY3 = require('./MY3.js'); }