#gulp #browserify #babeljs
#gulp #browserify #babeljs
Вопрос:
Я пытаюсь использовать ES2015 в своем браузере, а затем использовать gulp для преобразования его во что-то, что браузеры могут понять. Тем не менее, я получаю сообщение path must be a string
при выполнении gulp js
задачи.
gulpfile.babel.js
import Browserify from 'browserify';
import Gulp from 'gulp';
import Babel from 'gulp-babel';
import Buffer from 'vinyl-buffer';
import Source from 'vinyl-source-stream';
import Uglify from 'gulp-uglify';
Gulp.task('js', () => {
Browserify({
entries: 'public/scripts/Main.js',
debug: true
}).transform(Babel({
presets: ['es2015-node6']
}))
.bundle()
.on('error', error => console.error(error))
.pipe(Source('main.min.js'))
.pipe(Buffer())
.pipe(Uglify())
.pipe(Gulp.dest('dist/scripts/'));
});
Полное сообщение об ошибке
{ Error: path must be a string
at /Users/user/Documents/test/node_modules/resolve/lib/async.js:16:16
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickCallback (internal/process/next_tick.js:98:9)
...
}
Я пытался использовать babelify
вместо gulp-babel
, однако я не могу использовать gulp-uglify
, поскольку я также получаю ошибку
message: 'SyntaxError: Unexpected token: punc ())
Если это имеет значение, это то, что находится внутри моего main.js
import * as Render from './render';
(() => {
function init () {
console.log('here');
}
window.addEventListener('load', () => {
if (document.readyState === 'complete') {
init();
}
});
})();
и в моем `render.js
export function Render () {
console.log('Render');
};
export function RenderPosts () {
console.log('RenderPosts');
}
Кроме того, это не какой-то проект React. Я просто хочу использовать ES2015 во внешнем интерфейсе.
Комментарии:
1. Я не знаю о gulp. Но в сообщении говорилось, что параметр должен быть строкой. Не int, double или array. Покажите номер строки, в которой произошла ошибка.
2. В узле 6 было добавлено ограничение, поэтому, если у вас есть какие-то более старые зависимости, лучшим вариантом будет обновить ваш
package.json
, чтобы убедиться, что все ваши deps являются самыми последними версиями.
Ответ №1:
Ваша ошибка « path must be a string
» связана с передачей функции в .transform
.
import Browserify from 'browserify';
import Gulp from 'gulp';
import Babel from 'gulp-babel';
import Buffer from 'vinyl-buffer';
import Source from 'vinyl-source-stream';
import Uglify from 'gulp-uglify';
Gulp.task('js', () => {
Browserify({
entries: 'public/scripts/Main.js',
debug: true
}).transform('babelify', {
presets: ['es2015-node6']
})
.bundle()
.on('error', error => console.error(error))
.pipe(Source('main.min.js'))
.pipe(Buffer())
.pipe(Uglify())
.pipe(Gulp.dest('dist/scripts/'));
});
На всякий случай, babel-preset-es2015-node6
если вы не в курсе, это будет работать, только если ваш браузер поддерживает ES2015 изначально. Это также идеально подходит для использования с Gulp.