イシュー
- 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 経由で作成してあげる必要がある。