Ответ 1
Вы должны использовать опцию paths
. Он не задокументирован в браузере, но в node-browser-resolve (используется под капотом):
paths - массив require.paths, если ничего не найдено в обычном node_modules рекурсивная прогулка
Я нахожу, что это боль при перемещении файлов и постоянное переписывание файла, включая пути к их новой папке.
Я хочу избежать этого в моем браузере:
var View = require('../../../../base/view');
И сделайте что-то большее в соответствии с requirejs, где он знает мой базовый путь: js
:
var View = require('base/view');
Вы должны использовать опцию paths
. Он не задокументирован в браузере, но в node-browser-resolve (используется под капотом):
paths - массив require.paths, если ничего не найдено в обычном node_modules рекурсивная прогулка
Отличный вариант здесь - использовать плагин aliasify
, доступный здесь. Затем просто добавьте что-то вроде этого в ваш package.json
, причем все пути в aliasify config относятся к положению этого файла:
"browserify": {
"transform": [
"aliasify"
]
},
"aliasify": {
"aliases": {
"app": "./src/app",
"components": "./src/components",
"someAlias": "./src/app/some/path/to/a/place",
"foobar": "./go/to/a/module/named/foobar",
}
}
Затем в ваших файлах просто выполните:
var foobar = require("foobar");
var sampleComponent = require("components/someSample");
//My JS code
node_modules
Вы можете поместить свой код приложения (или символическую ссылку на него, если ваша платформа поддерживает его) в node_modules
. Например:.
node_modules/
+-- app/
+-- js/
+-- base/
+-- view.js
+-- a/
+-- b/
+-- c/
+-- somefile.js
// somefile.js
require("app/js/base/view");
Однако существует важное оговорка: это прерывает применение преобразований, указанных программным путем через API, например:
browserify('app/entry.js')
.transform(es6ify)
В браузере обозначьте концепцию "файлов верхнего уровня", которая вступает в игру с преобразованиями. Эта концепция и поведение преобразований в целом плохо объясняются в документации для браузера. Вы можете ознакомиться с некоторым обсуждением проблемы здесь: substack/ node -browserify # 993
Другим вариантом является мой pathmodify браузерный плагин. Это позволяет использовать не относительные пути и программные преобразования. Чтобы включить браузер, выполните следующие действия:
var View = require('base/view');
Вы бы сделали что-то вроде:
var pathmodify = require('pathmodify');
var opts = {mods: [
// Maps require() IDs beginning with "base/" to begin with
// "/somedir/js/base/"
pathmodify.mod.dir("base", "/somedir/js/base"),
]};
// Give browserify the real path to entry file(s).
// pathmodify will transform paths in require() calls.
browserify('./js/entry')
.plugin(pathmodify, opts)
.transform(es6ify)
.bundle()
...
Обратите внимание, что pathmodify решит проблему только для браузера. Если вам нужны пути, такие как base/view
, чтобы работать и в другом контексте, например node, то, если у вас есть симлинки, вы можете объединить их. Например, symlink node_modules/base
to /somedir/js/base
, а также настройте pathmodify как указано и продолжайте указывать браузеру на пути за пределами node_modules
для файлов ввода.