2015-02-26 1 views
1

J'ai actuellement cette configuration à l'aide grunt-contrib-concat:Réutiliser emplacement src/dest pour plusieurs opérations concat grognement

concat: { 
    injectedJs: { 
     'dist/js/inject/beatportInject.js': ['src/js/thirdParty/jquery.js', 'src/js/inject/beatportInject.js'], 
     'dist/js/inject/streamusInject.js': ['src/js/thirdParty/jquery.js', 'src/js/thirdParty/lodash.js', 'src/js/inject/streamusInject.js'], 
     'dist/js/inject/streamusShareInject.js': ['src/js/thirdParty/jquery.js', 'src/js/thirdParty/lodash.js', 'src/js/inject/streamusShareInject.js'], 
     'dist/js/inject/youTubeInject.js': ['src/js/thirdParty/jquery.js', 'src/js/thirdParty/lodash.js', 'src/js/inject/youTubeInject.js'], 
     'dist/js/inject/youTubeIFrameInject.js': ['src/js/thirdParty/jquery.js', 'src/js/thirdParty/lodash.js', 'src/js/inject/youTubeIFrameInject.js'] 
    } 
} 

Ce code fonctionne, mais il y a évidemment beaucoup de code non-SEC dans ces chaînes.

J'espère nettoyer cela en expriment le fait que je:

  • veulent toujours « dest » être « dist/js/injectent/»
  • veulent toujours « src » pour commencer avec 'src/js /'

Alors, dans mon esprit, je pourrais dire quelque chose à ce pseudo similaire code:

concat: { 
    injectedJs: { 
     files: [{ 
      expand: true, 
      dest: 'dist/js/inject/', 
      cwd: 'src/js' 

      //'beatportInject.js': ['thirdParty/jquery.js', 'inject/beatportInject.js'], 
      //'streamusInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/streamusInject.js'], 
      //'streamusShareInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/streamusShareInject.js'], 
      //'youTubeInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/youTubeInject.js'], 
      //'youTubeIFrameInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/youTubeIFrameInject.js'] 
     }] 
    } 
} 

mon bien Il n'y a plus rien à ce moment-là. Est-ce possible avec Grunt, ou dois-je avoir un peu de répétition?

+0

Si vous souhaitez utiliser commonjs et webpack, vous n'avez qu'à déclarer les points d'entrée. Autant que je sache, vous ne serez pas en mesure de réaliser quelque chose de bien mieux avec 'concat' simplement parce que les noms des fichiers de destination sont différents. – firstdoit

Répondre

0

Rappelez-vous la config est juste javascript simple, donc la solution la plus simple qui ne nécessite pas de piratage Grunt est tout simplement

function prefix(fileConfig) { 
    var newFileConfig = {}; 
    var distPrefix = 'dist/js/inject/'; 
    var srcPrefix = 'src/js/'; 

    for(var dest in fileConfig) { 
     newFileConfig[distPrefix + dest] = srcPrefix + fileConfig[dest]; 
    } 

    return newFileConfig; 
} 

grunt.initConfig({ 
    concat : { 
     injectedJs : { 
      files: [ 
       prefix({ 
       'beatportInject.js': ['thirdParty/jquery.js', 'inject/beatportInject.js'], 
       'streamusInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/streamusInject.js'], 
       'streamusShareInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/streamusShareInject.js'], 
       'youTubeInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/youTubeInject.js'], 
       'youTubeIFrameInject.js': ['thirdParty/jquery.js', 'thirdParty/lodash.js', 'inject/youTubeIFrameInject.js'] 
      }) 
      ] 
     } 
    } 
}) 

En ce qui concerne votre problème réel, concaténer scripts, il semble que ce que vous devriez vraiment regarder dans est quelque chose comme Browserify ou WebPack. Cela vous épargnera beaucoup d'ennuis.