2015-03-12 19 views
7

C'è un file javascript che ho bisogno di usare nel mio progetto come dipendenza. Non ha un repository github, non è su bower o npm, vive solo qui.Shimming di un pacchetto con Webpack

http://a.klaviyo.com/media/js/learnmarklet.js

posso installarlo con pergolato con:

bower install http://a.klaviyo.com/media/js/learnmarklet.js --save 

So che sarà poi vivere nel mio progetto:

./bower_components/learnmarklet/index.js 

E so che attribuisce una variabile chiamato _learnq all'oggetto della finestra globale.

Quello che voglio è semplicemente questo.

var _learnq = require("klaviyo") 

ho bisogno di alias klaviyo qualcosa di simile.

{ 
    "klaviyo": "./bower_components/learnmarklet/index.js" 
} 

E "shim" un'esportazione della variabile _learnq come questa.

{ 
    "klaviyo": "_learnq" 
} 

Come posso fare questo con il webpack?

Questo è quello che ho provato, questo è ciò che assomiglia al mio webpack.config.js.

module.exports = { 
    resolve:{ 
    alias:{ 
     "klaviyo": "./bower_components/learnmarklet/index.js" 
    } 
    }, 
    externals: { 
    klaviyo: "_learnq" 
    } 
} 

risposta

8

Nel tuo esempio, il codice tipo di conflitto, il externals dice fondamentalmente

require('klaviyo') 

devono essere riscritti per

window._learnq 

e l'alias dice

require('klaviyo') 

fondamentalmente fa

require('./bower_components/learnmarklet/index.js') 

Quello che vi consiglio è questo:

module.exports = { 
    resolve:{ 
    alias:{ 
     // Make it so that 'require' finds the right file. 
     "klaviyo": "./bower_components/learnmarklet/index.js" 
    } 
    }, 
    module: { 
    loaders: [{ 
     // Rewrite the file so that it exports the window global. 
     test: __dirname + '/bower_components/learnmarklet/index.js', 
     loader: 'exports?window._learnq' 
    }] 
    } 
} 

bisogno di voi per npm install exports-loader pure.

+0

Sono felice di accettare questo come risposta. Credo che dovrebbe funzionare. Sto ricevendo alcuni strani errori dalla mia parte a causa del modo in cui questo script è stato creato. È apparentemente in cerca di pacchetti nodejs fs, file e sistema https://gist.github.com/reggi/628736bdb70a2a98deae – ThomasReggi

+0

Ahh che sicuramente dipenderà dall'utilizzo. Se il codice dipende dal filesystem per qualcosa di critico, la libreria potrebbe semplicemente essere inutilizzabile nel browser. – loganfsmyth

+0

No! È per il browser! Ha solo requisiti condizionali per quando viene eseguito all'interno del nodo. Quando vengono eseguiti all'interno del pacchetto Web, tali condizioni si interrompono perché si tratta di un ambiente CommonJS. – ThomasReggi

Problemi correlati