node.js - Refaktorovanie userscriptu na použitie javascript modulov


Pracujem na userscripte - konkrétne na tomto userscripte - ktorý bol navrhnutý tak, aby zapúzdroval funkcionalitu do modulov. Aby som mohol vykonať niektoré automatizované testovanie, rád by som rozdelil moduly do samostatných súborov a použil node.js funkcie pre exportovanie modulov a require na ich zjednotenie do jedného súboru na použitie v Greasemonkey alebo jednoduchých rozšíreniach prehliadača.

Moja prvá myšlienka bola jednoducho skopírovať moduly do ich vlastných súborov takto

module.js

var exportedModule = (function (){  
    var Module = {  
        // public functions and members  
    };  

    //private functions and members  

    return Module;  
}());  

module.exports = exports = exportedModule;  

A potom mať centrálny súbor, ktorý vyžaduje každý z týchto modulov, možno ich kompilovať niečím ako Browserify.

script.js

var importedModule = require(./module);

importedModule.init();

Je to možné?

Odpoveď č. 1

Zdá sa mi, že by vám bolo lepšie používať Requirejs, ktorý používa moduly v štýle AMD a je prirodzene viac priateľský k prehliadaču. Node moduly v štýle commonjs sú synchronné a veľmi dobre nezapadajú do modelu prehliadača.

Samozrejme, používanie requirejs trochu zmení vaše skripty.

Odpoveď č. 2

Je to možné a Browserify to zjednodušuje:

browserify src/my.user.js -o dist/my.user.js

Metaúdaje v zdrojovom súbore sa môžu presunúť, ale stále sa správne analyzujú (aspoň Greasemonkey ich správne spracuje).

Pre komplexnejší príklad, ktorý kompiluje rôzne zdroje, vrátane CSS a obrázkov, pozrite si tu.