2015-01-26 2 views
9

Я пытаюсь ввести переменную в каждый модуль в моем пакете веб-пакетов, чтобы иметь отладочную информацию для ошибок JS для каждого файла. Я включилВвод переменных в webpack

node: { 
    __filename: true 
} 

Current file path in webpack

в моем webpack.config, но я хотел бы, чтобы привнести что-то вроде

var filename = 'My filename is: ' + __filename; 

в каждый модуль до компиляции. Я видел Banner Plugin с опцией raw, но, похоже, это только добавит баннер за пределы закрытия веб-пакета, а не мой желаемый результат ввода скрипта в каждый модуль.

ответ

1

Написать свой собственный загрузчик:

my_project/my_loaders/имя_файла-loader.js:

module.exports = function(source) { 
    var injection = 'var __filename = "' + this.resourcePath + '";\n'; 
    return injection + source; 
}; 

Добавить его в трубопровод и убедитесь, чтобы добавить также конфигурацию:

resolveLoader: { 
    modulesDirectories: ["my_loaders", "node_modules"] 
} 

См. Документацию по адресу how to write a loader.

+0

Я создал этот загрузчик https://github.com/optimizely/marketing-website/blob/dfoxpowell/jordan-webpack-try/loaders/inject-filename-loader.js, который отлично работает, но он не работает для некоторых причина в нашей сборке CI. Я задал вопрос здесь: http://stackoverflow.com/questions/29850802/webpack-loader-not-working-on-jenkins-ci-build, и это сводит меня с ума, если у вас есть идеи? – dtothefp

15

Я использую переменные, чтобы решить несколько переменных в моем webpack.config.js файле:

plugins: [ 
    new webpack.DefinePlugin({ 
     ENVIRONMENT: JSON.stringify(process.env.NODE_ENV || 'development'), 
     VERSION: JSON.stringify(require('./package.json').version) 
    }) 
] 

Это не может быть достаточно динамичным, но если это так, то вы можете быть в состоянии обойти этот загрузчик решения.

+1

Чтобы динамически передавать динамические переменные, вы все равно можете использовать этот плагин. Просто скажите при создании: webpack --define myurl = "http: // localhost: 3000" – Richard

+1

Почему вы используете JSON.stringify на process.env.NODE_ENV? –

+0

Если, скажем, VERSION используется как переменная в коде, а JSON.stringify не используется (или другой механизм, который добавил кавычки), то вы получите что-то вроде этого (ошибка компилятора): console.log (VERSION) -> console.log (1.0.0), когда вы хотите console.log («1.0.0») –

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