4

したがって、2 つのファイルがフォルダーのすぐ内側にあるファイルのディレクトリがあります。

views/view1.js
views/view2.js

しかし、1つはより深いレベルでネストされています

views/other/view3.js

これらをエイリアスマッピングを使用してコンパイルしたいので、次のgrunt-browserifyように要求できます。

require('view1')

require('view2')

require('other/view3')

だから私は設定で簡単なマッピングをセットアップしますgrunt-browserify

{
  expand: true,
  cwd: 'views/',
  src: ['**/*.js'],
  dest: ''
}

最初の 2 つのファイルrequire()は問題ありませんが、最後のファイルが見つかりません。私が使用しているエイリアス マッピングは、単一レベルの深さしか見ていません。与えるすべてのレベルを下げるにはどうすればよいですか?

4

2 に答える 2

5

aliasMappingsマッピングの例を正しく機能させることさえできないため、オプション全体が壊れているようです。aliasify(このコードのbyronwongに感謝します)を使用する別のソリューションを見つけました。これは私の作業がどのように見えるかです:Gruntfile

var util = require('util');
var aliasify = require('aliasify');

module.exports = function(grunt) {

  // takes grunt-browserify aliasMappings config and converts it into an aliasify config.
  function configureAliasify(aliasMappings) {
    var expandedAliases = {};
    aliases = util.isArray(aliasMappings) ? aliasMappings : [aliasMappings];
    aliases.forEach(function (alias) {
      grunt.file.expandMapping(alias.src, alias.dest, {cwd: alias.cwd}).forEach(function(file) {
        var expose = file.dest.substr(0, file.dest.lastIndexOf('.'));
        expandedAliases[expose] = './' + file.src[0];
      });
    });

    return require('aliasify').configure({
      aliases: expandedAliases
    });
  }

  // Create alias mappings with aliasify
  var aliasMappings = configureAliasify({
    cwd: 'views',
    src: ['**/*.js'],
    dest: ''
  });

  // Project configuration.
  grunt.initConfig({
    browserify: {
      dist: {
        files: {
          'build/app.js': ['client/entry.js']
        },
        options: {
          debug: true,
          transform: [aliasMappings]
        }
      }
    }
  });

  // Load the plugin that provides the "browserify" task.
  grunt.loadNpmTasks('grunt-browserify');

  // Default task(s).
  grunt.registerTask('default', ['browserify']);

};

このclient/entry.jsファイルは、ディレクトリに存在するすべてのファイルをviewsエイリアスとして要求できるようになりました。

上記の解決策は機能しますが、aliasifyは支持されなくなったことに注意してくださいtagify。ただし、tagify根本的に異なるaliasifyため、代わりにそのライブラリを使用するソリューションがどのように見えるかはよくわかりません。

更新:aliasifyさらにいじった後、 orを使用する必要がないことに気付きましたtagify。基本的に必要なのは、配列を受け取っaliasMappingて返すマッピング関数です。aliasこれは多かれ少なかれgrunt-browserifyで行うべきことですaliasMappingが、何らかの理由で機能していません。これは私が最終的に得たものです:

var util = require('util');

module.exports = function(grunt) {

  // Takes grunt-browserify aliasMappings config and converts it into an alias array
  function aliasMappingsToAliasArray(aliasMappings) {
    var aliasArray = [];
    aliases = util.isArray(aliasMappings) ? aliasMappings : [aliasMappings];
    aliases.forEach(function (alias) {
      grunt.file.expandMapping(alias.src, alias.dest, {cwd: alias.cwd}).forEach(function(file) {
        var expose = file.dest.substr(0, file.dest.lastIndexOf('.'));
        aliasArray.push('./' + file.src[0] + ':' + expose);
      });
    });
    return aliasArray;
  }

  // Project configuration.
  grunt.initConfig({
    browserify: {
      dist: {
        files: {
            'build/app.js': ['client/entry.js']
        },
        options: {
          debug: true,
          alias: aliasMappingsToAliasArray({
            cwd: 'shared',
            src: ['**/*.js'],
            dest: ''
          })
        }
      }
    }
  });

  // Load the plugin that provides the "browserify" task.
  grunt.loadNpmTasks('grunt-browserify');

  // Default task(s).
  grunt.registerTask('default', ['browserify']);

};
于 2014-02-11T20:03:07.973 に答える
2

そのaliasMapping構成は現在、v2 ベータ版で期待どおりに機能しています。

でインストールできますnpm install grunt-browserify@2

于 2014-03-01T12:53:54.690 に答える