2015-03-12 7 views
7

Существует файл javascript, который мне нужно использовать в моем проекте как зависимость. В нем нет репозитория github, он не находится на bower, или npm, он просто живет здесь.Уборка пакета с помощью webpack

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

Я могу установить его с беседкой с:

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

Я знаю, что он будет жить в моем проекте по адресу:

./bower_components/learnmarklet/index.js 

И я знаю, что это придает переменную _learnq - глобальному объекту окна.

Я хочу просто это.

var _learnq = require("klaviyo") 

Мне нужно сделать псевдоним klaviyo что-то вроде этого.

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

И «прокладка» экспорт в _learnq переменной, как это.

{ 
    "klaviyo": "_learnq" 
} 

Как это сделать с помощью webpack?

Это то, что я пробовал, вот что выглядит мой webpack.config.js.

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

ответ

8

В вашем примере, ваш код будет своего рода конфликт, externals в основном говорит

require('klaviyo') 

должен быть переписан

window._learnq 

и псевдоним говорит

require('klaviyo') 

в основном делает

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

То, что я рекомендовал бы это:

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' 
    }] 
    } 
} 

нуждаются в вас, чтобы npm install exports-loader, а также.

+0

Я рад принять это как ответ. Я считаю, что это должно сработать. Я получаю некоторые странные ошибки на моей стороне из-за того, как этот скрипт был создан. По-видимому, он ищет пакеты nodejs fs, file и system https://gist.github.com/reggi/628736bdb70a2a98deae – ThomasReggi

+0

Ahh, что определенно зависит от использования. Если код зависит от файловой системы от чего-то критического, библиотека может быть просто непригодна для использования в браузере. – loganfsmyth

+0

Нет! Это для браузера! У этого есть только условные требования, когда он выполняется внутри узла. При запуске в веб-пакете эти условия прерываются, потому что это среда CommonJS. – ThomasReggi

Смежные вопросы