Browserify basedir option (RequireJS-like)
Я не могу понять, как работает опция browserify basedir ..
Примечание : я могу ошибаться в своем понимании всей концепции basedir, потому что я исхожу из RequireJS (think baseUrl).
EDIT
Действительно, я был неправ, но вы все еще можете достичь того, что я пытался сделать с помощью опции paths, см. Мой ответ ниже.
Я понимаю, что опция basedir дает вам возможность (свободу!) для указания всех требуемых путей (начиная с .) из статического корневого / базового реж.. И не от process.cwd()..
Это буквально сводит меня с ума, я думал, что такая функция будет настолько простой в реализации, и что многие люди столкнулись бы с той же проблемой, что и я, но на самом деле в интернете очень мало информации о том, как правильно настроить опцию basedir.. И поверьте мне, это не прямолинейно..
Дан следующий файл структура:
js/
js/app.js
js/src/models/Person.js
js/src/views/PersonView.js
И бегом:
var browserify = require('browserify');
var gulp = require('gulp');
gulp.task('scripts', function() {
var b = browserify('./app', {basedir: './js'});
b.bundle().pipe(gulp.dest('./dist'));
});
Я ожидал бы, что смогу сделать следующий require() вызов в PersonView.js:
var Person = require('./src/models/Person');
...
Вместо (что, очевидно, работает...):
var Person = require('../models/Person');
...
Но я получаю следующую ошибку:
Error: module "./src/models/Person" not found from "/Users/...some path.../js/src/views/PersonView.js"
Что я упускаю из виду при выборе варианта basedir?
1 ответ:
Оказывается, что
basedirне то же самое, что RequireJSbaseUrl. Как заявил @Ben в комментарии выше, официальные документы говорят:
opts.basedirявляется ли каталог, который browserify начинает связывать от для имен файлов, которые начинаются с..Означает, что
basedirприменяется только кentryфайлы . Далееrequireвызовы глубоко в структуре дерева файлов всегда будут разрешаться относительно текущего файла быть разобранным.Ответ на мой вопрос
Вариант
pathsbrowser-resolve(который используетсяbrowserifyпод капотом) - это то, что я искал:Пути-требуют.массив путей для использования, если ничего не найдено на нормальном node_modules рекурсивное блуждание
Просто передайте эту опцию вместе с другими
browserifyопциями при создании экземпляра bundler.Примечание : похоже, что это путаница вещи при использовании вместе с
browserify-shimпреобразование .