[JS] RequireJS laden van Client.js

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • M4RTiN
  • Registratie: Augustus 2000
  • Laatst online: 24-11-2024
Ik probeer in een project wat ik met behulp van requirejs maak, een library te laden genaamd clientjs. Ik heb netjes de configuratie uitgebreid zodat clientjs wordt geladen en binnen mijn eigen module kan ik:

code:
1
2
3
require(['clientjs'], function(clientjs) {

});


Hier treden geen foutmeldingen op.

Maar als ik iets wil doen in de vorm van om het daadwerkelijk te gaan gebruiken:

code:
1
2
3
4
require(['clientjs'], function(clientjs) {
  //var client = new ClientJS();
//var fingerprint = client.getFingerprint();
});


Dan krijg ik een error in de console:

code:
1
ReferenceError: exports is not defined


Vervolgens heb ik hier diverse varianten geprobeerd maar het mocht niet baten

Nu is niet elke javascript die je zomaar wilt gebruiken geschikt om te gebruiken in een omgeving, maar volgens mij zou clientjs wel moeten lukken aangezien het ook een NPM package is. Is het veilig om aan te nemen dat wanneer er termen als AMD / NPM worden gebruikt bij een project dat het te gebruiken is met een omgeving zoals requirejs ? Bij al mijn zoekacties op ClientJS + RequireJS kom ik elke keer weer in deze hoek terecht.

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Er klopt weinig van je code voorbeeld, dat maakt het wat moeilijk te analyseren wat er mis gaat.
Je code is uitgecomment, maar laat ik even aannemen dat dat een typo is.

Dan heb je iig het probleem dat ClientJS niet gedefinieerd is, je moet het functie argument `clientjs` hernoemen naar `ClientJS`.

Als je daarnaast ook nog aangeeft welke ClientJS library je gebruikt, dan is voor ons ook nog eens na te gaan of dat ding uberhaupt AMD ondersteunt. Dat het op NPM staat zegt uiteraard niks.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • M4RTiN
  • Registratie: Augustus 2000
  • Laatst online: 24-11-2024
Excuus voor de fouten in de code, ik ben letterlijk aan het prutsen aangezien veel materie onbekend is.

Ik dacht dat ik qua laden van libs via RequireJS vrij was om eigen beschrijvingen te verzinnen, maar als ik het goed begrijp moet ik exact dezelfde benaming als hoe de object heet aanhouden ?

Ik had in mijn require.config alle verwijzing naar ClientJS zonder hoofdletters gedaan. Ik heb nu overal alles aangepast naar ClientJS en het laden lijkt beter te gaan (error omtrent exports is not defined is verdwenen).

Met typeof kom ik erachter dat variabele client nu wel een object is.

Echter kan ik nog niet de methods aanroepen die je zou verwachten:

code:
1
2
var client = new ClientJS();
var resolution = client.getCurrentResolution();


Levert op:

code:
1
TypeError: client.getCurrentResolution is not a function


Met een zoek actie kom ik er achter dat ik met de volgende functie alle methodes kan bekijken:

code:
1
console.log(Object.getOwnPropertyNames(ClientJS));


De output hiervan geeft:

code:
1
Array [ "VERSION", "BROWSER", "CPU", "DEVICE", "ENGINE", "OS", "prototype", "length", "name" ]


Dit zijn niet de (of alle) methodes die ik zoek.

Ik heb overigens de versie van github gebruikt:

https://github.com/jacksp...master/dist/client.min.js

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Die module ondersteunt geen AMD/RequireJS enkel CommonJS.

Daarnaast is het sterk af te raden om de user agent te proberen te detecteren en aan de hand daarvan andere code te draaien. Als je ondersteuning ergens van wilt detecteren, dan detecteer je die ondersteuning direct. Bijv. hoe een pakket als Modernizr z'n werk doet.

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
M4RTiN schreef op donderdag 11 februari 2016 @ 21:57:
Ik dacht dat ik qua laden van libs via RequireJS vrij was om eigen beschrijvingen te verzinnen, maar als ik het goed begrijp moet ik exact dezelfde benaming als hoe de object heet aanhouden ?
Nee. Je moet zorgen dat de parameter in de factory function ook de naam is die je gaat gebruiken:

JavaScript:
1
2
3
require([ "foo" ], function( Foo ) {
  var foo = new Foo();
});

Acties:
  • 0 Henk 'm!

  • M4RTiN
  • Registratie: Augustus 2000
  • Laatst online: 24-11-2024
Het mislukken van het laden ligt dus aan het feit dat het geen goede AMD ondersteuning heeft. Ik heb inmiddels een bibliotheek gevonden die wel via AMD geladen worden. Hierdoor is dit probleem opgelost.

Ik heb naar eigen zeggen valide redenen om de resolutie op te willen vragen, maar bovendien was dit topic ook aanwezig om meer te leren van modules (laden) in javascript. Dat is bij deze ook weer gelukt.
Pagina: 1