Sto cercando di refactoring una libreria che utilizza Browserify shimming alcuni moduli dal bundle utilizzando browserify-shim. Nello specifico, la libreria usa require ("codemirror") ma voglio fornire un bundle che non includa CodeMirror, ma ne userò uno fornito via CDN.Shimming dipendenze delle dipendenze con browserify-shim
Così ho browserify-shim config nella mia package.json come
"browserify-shim": {
"jquery": "global:jQuery",
"codemirror": "global:CodeMirror"
}
Fin qui tutto bene. require ('jquery') e require ('codemirror') sono scomparsi dal bundle browserificato e sono stati sostituiti dallo snippet di codice previsto per estrarre jQuery e CodeMirror dall'oggetto window.
La libreria richiede anche alcuni componenti aggiuntivi CodeMirror. Ad esempio require ('codemirror/addon/hint/show-hint.js'). Va bene. Voglio questo componente aggiuntivo in bundle. Tuttavia, all'interno di questo add-on è un wrapper UMD che include require ("../../ lib/codemirror"). Browserify sta vedendo questo e sta raggruppando il CodeMirror da /node_modules/codemirror/lib/codemirror.js a causa di questo (credo). Voglio che usi window.CodeMirror come definito nello shim codemirror, ma non riesco a capirlo. Hanno provato molte varianti tra cui i seguenti:
"browserify-shim": {
"jquery": "global:jQuery",
"codemirror": "global:CodeMirror",
"../../lib/codemirror": "global:CodeMirror",
"codemirror/addon/hint/show-hint.js": {
"exports":null,
"depends":["../../lib/codemirror:CodeMirror"]
}
}
che richiedono ("../../ lib/CodeMirror") non andrà via! Sono sicuro che mi manchi qualcosa.
Sto eseguendo questo da uno script Gulp, ma non penso che dovrebbe fare alcuna differenza. Browserify versione 3.38.1. Browserify-shim versione 3.7.0.
Qualche idea?
Sembra che browserify-shim potrebbe essere stato il modo sbagliato per farlo. L'opzione browserify bundleExternal = false può risolvere il problema. Indagare ... –
bundleExternal = false non è la risposta completa in quanto lascia le istruzioni 'require' iniziali in atto. Quindi browserify-shim come nel primo esempio è ancora necessario. Ma aiuta. Con questa impostazione, posso direttamente .require ('codemirror/addon/hint/show-hint.js') prima di raggruppare nello script Gulp per ottenere l'add-on, ma il requisito esterno di CodeMirror verrà lasciato fuori, sembra . –
Sembra che nell'ultima versione di browserify ci sia la possibilità di applicare {global: true} alla trasformazione di browserify-shim, che farà in modo che funzioni sulle dipendenze! Questo ci permette di ridurre il bisogno ('../../ lib/codemirror') con successo. –