2013-11-21 37 views
4

所以我有文件的目錄,其中兩個文件將立即裏面的文件夾:咕嚕-browserify aliasMapping兩層深

views/view1.js 
views/view2.js 

但一個是嵌套更深一層

views/other/view3.js 

我想要用grunt-browserify使用別名映射編譯這些,所以我可以要求它們爲:

require('view1')

require('view2')

require('other/view3')

所以我設置在grunt-browserify配置簡單的映射:

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

前兩個文件require()很好,但最後一個都找不到。我正在使用的別名映射只能看到一個深度級別。我怎樣才能讓它落到我給它的每一個級別?

+0

'**/*安裝。js'應該工作,你可以用'-v'標誌運行呢?也許給我們提供你正在使用的軟件包的版本號,包括節點。 –

回答

5

整個aliasMappings選項似乎中斷,因爲我甚至不能讓他們的映射示例正常工作。我發現另一個解決方案,使用aliasify(榮譽byronwongthis code)。這是怎麼我的工作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。然而,tagifyaliasify有根本的不同,因此不太確定使用該lib的解決方案的樣子。

更新:經過一番搗鼓之後,我意識到沒有必要使用aliasifytagify。所需要的基本上是一個映射函數,它需要aliasMapping並返回一個alias數組。這或多或少是grunt-browserifyaliasMapping應該做的,但由於某些原因,它不起作用。這是我結束了:

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']); 

}; 
+0

你真了不起!現在我可以修復我所有的路徑了:-) – FakeRainBrigand

+0

非常歡迎您!請檢查我添加到github問題的評論。由於它不更新映射,因此它在手錶期間無法按預期工作。但如果你能忍受它,它會工作得很好:) – mekwall

+0

@FakeRainBrigand不要忘記接受這個答案,如果它回答了你的問題:) – mekwall

2

aliasMapping配置現在按預期在v2測試版中工作。

您可以npm install [email protected]

+0

。我仍然無法工作。 – mrbinky3000

+0

aliasMapping已從grunt-browserify中刪除。新選項現在是[別名](https://github.com/jmreidy/grunt-browserify#alias),它實際上並不是直接替代品。查看Marcus Ekwall更新的代碼,我正在使用類似的方法,並且工作正常。 –