Grunt Browserify — установить включение, резервный путь

Есть ли способ создать задачу Grunt для Browserify, чтобы использовать запасной путь? Например.

require('./module.js)

Проверить, находится ли module.js в текущем каталоге, если нет, проверить какой-нибудь другой каталог?

    project1
     |- dir1
         |- mod1.js - has: require('./mod2.js')
         |- bundle.js - has: require('./mod1.js') and require('./mod2.js')
    project2
     |- dir2
         |- mod1.js 
         |- mod2.js

Я уже пробовал remapify, но он может проверять только один конкретный каталог. И я не хочу менять требуемые пути внутри модулей, все нужно делать через Grunt.

Я хочу переопределить какое-то приложение (dir2), поэтому я хочу получить (скопировать в dir1) только модули, которые мне нужно изменить, и оставить все остальные в каталоге приложения.

Gruntfile находится в project1. Модули CommonJS. Я использую grunt-browserify.


person lima_fil    schedule 26.01.2015    source источник


Ответы (1)


Я знаю, что это немного устарело, но было бы хорошо получить ответ.

Итак, я задал себе очень похожий вопрос пару дней назад и в итоге сделал то, что вы хотите сделать.

Использование browserifyOptions из grunt-browserify, например:

// Using grunt-browserify
grunt.loadNpmTasks("grunt-browserify");

grunt.initConfig({
  browserify : {
    options : {
      browserifyOptions : {
        // keep in mind that paths are relative to Gruntfile.js
        paths: ["./first/path", "./second/path", "./and/so/on"]
      }
    },
    dist : {
      files: { "./path/to/dist.js" : "./path/to/src.js" }
    }
  },
});

И теперь вы сможете:

var myModule = require("myModule"); 

opts.paths — это массив каталогов, в которых осуществляется браузерный поиск при поиске модулей, на которые не ссылаются с использованием относительного пути. Может быть абсолютным или относительным по отношению к основанию. Эквивалент установки переменной среды NODE_PATH при вызове команды browserify. - Browserify

Теоретически он должен следовать путям по порядку, единственная проблема, с которой я столкнулся, заключается в том, что он просматривает собственные модули узлов (util, fs и т. д.), прежде чем даже искать эти пути.

Цитата говорит о том, что если вы сделаете:

var myModule = require("./myModule"); 

Browserify будет искать модуль по относительному пути. Когда вы удаляете относительный путь:

var myModule = require("myModule");

он может искать по установленным путям в опциях.

Редактировать

Я проверил это, и он работает так, как ожидалось. У меня есть модуль с именем myModule.js, который находится в "./current/directory", а также модуль с именем myModule.js, который находится в "./modules/directory". Кроме того, в текущем каталоге у меня есть «src.js», для которого требуется модуль: require("myModule");. Он просматривает пути по порядку, и первым найденным является тот, который вводится в bundle.js в этом случае.

grunt.initConfig({
  browserify : {

    dist : {
      options : {
        browserifyOptions : {
          // keep in mind that paths are relative to Gruntfile.js
          paths: ["./current/directory", "./modules/directory"]
        }
      },
      files: { "./current/directory/bundle.js" : "./current/directory/src.js" }
    }
  },
});
person pgarciacamou    schedule 01.09.2015