Подтвердить что ты не робот

Получить браузеру нужно, чтобы пути приводили больше, чем requirejs

Я нахожу, что это боль при перемещении файлов и постоянное переписывание файла, включая пути к их новой папке.

Я хочу избежать этого в моем браузере:

var View = require('../../../../base/view');

И сделайте что-то большее в соответствии с requirejs, где он знает мой базовый путь: js:

var View = require('base/view');
4b9b3361

Ответ 1

Вы должны использовать опцию paths. Он не задокументирован в браузере, но в node-browser-resolve (используется под капотом):

paths - массив require.paths, если ничего не найдено в обычном node_modules рекурсивная прогулка

Ответ 2

Отличный вариант здесь - использовать плагин 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

Ответ 3

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

Другим вариантом является мой 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 для файлов ввода.