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
вызовы глубоко в структуре дерева файлов всегда будут разрешаться относительно текущего файла быть разобранным.Ответ на мой вопрос
Вариант
paths
browser-resolve
(который используетсяbrowserify
под капотом) - это то, что я искал:Пути-требуют.массив путей для использования, если ничего не найдено на нормальном node_modules рекурсивное блуждание
Просто передайте эту опцию вместе с другими
browserify
опциями при создании экземпляра bundler.Примечание : похоже, что это путаница вещи при использовании вместе с
browserify-shim
преобразование .