Вся опция 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
или 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']);
};
person
mekwall
schedule
11.02.2014
**/*.js
должно работать, не могли бы вы запустить его с флагом-v
? И, возможно, сообщите нам номера версий пакетов, которые вы используете, включая node. - person Allan Kimmer Jensen   schedule 10.02.2014