Sailsのprod オプション時に 共通JSのAssetファイルが連結されない、なんで?

イシュー

  • Sails組み込みの gruntの仕組みによって、prodオプションでデプロイした場合、Assetファイル中のJSファイルは、concatで結合されて一つのproduction.jsになると思うのだが、「assets/js/dependencies/sails.io.js」しかjsに含まれていない、、なんで?

参考

assetのJSを結合しているところの設定ファイル

  • (開発): tasks/register/default.js
module.exports = function (grunt) {
    grunt.registerTask('default', ['compileAssets', 'linkAssets',  'watch']);
};
  • (本番): tasks/register/prod.js
module.exports = function (grunt) {
    grunt.registerTask('prod', [
        'compileAssets',
        'concat',
        'uglify',
        'cssmin',
        'sails-linker:prodJs',
        'sails-linker:prodStyles',
        'sails-linker:devTpl',
        'sails-linker:prodJsJade',
        'sails-linker:prodStylesJade',
        'sails-linker:devTplJade'
    ]);
};

sails-linkerの中身(抜粋)

module.exports = function(grunt) {

  grunt.config.set('sails-linker', {
    devJs: {
      options: {
        startTag: '<!--SCRIPTS-->',
        endTag: '<!--SCRIPTS END-->',
        fileTmpl: '<script src="%s"></script>',
        appRoot: '.tmp/public'
      },
      files: {
        '.tmp/public/**/*.html': require('../pipeline').jsFilesToInject,
        'views/**/*.html': require('../pipeline').jsFilesToInject,
        'views/**/*.ejs': require('../pipeline').jsFilesToInject
      }
    },
    prodJs: {
      options: {
        startTag: '<!--SCRIPTS-->',
        endTag: '<!--SCRIPTS END-->',
        fileTmpl: '<script src="%s"></script>',
        appRoot: '.tmp/public'
      },
      files: {
        '.tmp/public/**/*.html': ['.tmp/public/min/production.min.js'],
        'views/**/*.html': ['.tmp/public/min/production.min.js'],
        'views/**/*.ejs': ['.tmp/public/min/production.min.js']
      }
    },
    // ..中略..
  });
  grunt.loadNpmTasks('grunt-sails-linker');
};

devJsとprodJsの差異

  • devJsでは、../pipeline のjsFilesToInjectを呼んでいるが、prodJsでは「'.tmp/public/min/production.min.js'(固定値)」になっている。
  • これは、dev環境で.tmpに作成されたjsファイルを呼び出そうとしているってこと?
    • herokuへのdeploy時には、dev環境の状態を経由しないため、devJsを呼んでやる(ダメだった)か、prodJsをjsFilesToInject 経由で作成してあげる必要がある。