Импорт Babelify в приложении actJS не заменяет объявления let на var
Я создал небольшое приложение ReactJS, которое запускается в браузере, у меня проблемы со старыми версиями браузера (особенно на устройствах с iOS), приложение построено с помощью node и browserify/babelify
У меня есть следующая настройка gulpfile:
gulp.task('build', function () {
return browserify({entries: './src/app.jsx', extensions: ['.jsx'], debug: true})
.transform(babelify)
.bundle()
.pipe(source('app.js'))
.pipe(buffer())
.pipe(minify())
.pipe(gulp.dest('public/layout/lib'))
})
со следующим конфигом:
{
"presets": ["env"],
"plugins": ["transform-react-jsx"],
}
один из моих реактивных компонентов импортирует модуль следующим образом:
import ethereum_address from 'ethereum-address'
код работает, но по какой-то причине у баблифицированного пакета все еще есть use strict
и немного let
объявления, которые приходят из этого конкретного модуля.
Могу ли я что-нибудь сделать, чтобы babelify фактически заменила эти объявления по мере необходимости, чтобы этот код работал в старых браузерах?
1 ответ
Покопавшись и увидев, что обнаружила Элин Герсин, я теперь понял проблему.
кажется, что при преобразовании необходимо указать global
свойство, чтобы преобразователь знал, что он работает на всех импорте, а не только на реагирующих компонентах.
результирующее задание глотка выглядит так:
gulp.task('build', ['sass'], function () {
return browserify({entries: './src/app.jsx', debug: true})
.transform(babelify, {
global: true,
only: /^(?:.*\/node_modules\/ethereum-address\/|(?!.*\/node_modules\/)).*$/
})
.bundle()
.pipe(source('app.js'))
.pipe(buffer())
.pipe(minify())
.pipe(gulp.dest('public/layout/lib'))
})