我是前端的人,我使用Grunt(cssmin,更少的编译,丑陋,livereload,图像缩小,观看,lint...),我开始与一个使用Symfony的后端人员合作(twig 模板,资产用于我用Grunt完成的大部分任务......)
我们正在使用一种模型-视图-视图模型模式(抱歉,我不是后端专家)。
问题是为我们双方找到合适的工作流程。
我想留在 Grunt 因为我认为它现在是前端最好的。
我通常的工作流程是在 localhost:9000 上启动 Grunt 网络服务器并使用实时加载进行编码,减少编译。
完成后,我可以使用"Grunt build"来完成"生产"任务(缩小、丑化、图像压缩......
问题来自 Php 和 Twig 模板,我不能使用 grunt 并为 Php 启动网络服务器,我不能用 twig 渲染模板.js因为它不是我们在生产中使用的。
此外,我们还必须在服务器端处理Symfony2框架。
对于实时重新加载部分,我使用的是独立插件,但监控文件并重新加载页面,但例如,由于 Lessphp 与 Twitter Bootstrap(我在前端使用的框架)不完全兼容,因此较少的编译不起作用
你有什么建议吗?我可以添加详细信息以防万一。
我宁愿尽可能多地留在Grunt,但如果他做所有相同的任务或其他解决方案,我可以考虑使用Assetics。
这是我的实际 Gruntfile.js当我只在前端工作时:
var LIVERELOAD_PORT = 35729;
var lrSnippet = require('connect-livereload')({
port: LIVERELOAD_PORT
});
var mountFolder = function(connect, dir) {
return connect.static(require('path').resolve(dir));
};
module.exports = function(grunt) {
pkg: grunt.file.readJSON('package.json'),
src: 'src',
app: 'app',
assets: '<%= project.app %>/assets',
css: [
'<%= project.src %>/less/bootstrap.less'
],
js: [
'<%= project.src %>/js/*.js'
]
},
connect: {
options: {
port: 9000,
hostname: '*'
},
livereload: {
options: {
middleware: function(connect) {
return [lrSnippet, mountFolder(connect, 'app')];
}
}
}
},
concat: {
dev: {
files: {
'<%= project.assets %>/js/scripts.min.js': '<%= project.js %>'
}
},
options: {
stripBanners: true,
nonull: true,
banner: '<%= tag.banner %>'
}
},
uglify: {
options: {
banner: "<%= tag.banner %>"
},
dist: {
files: {
'<%= project.assets %>/js/scripts.min.js': '<%= project.js %>'
}
}
},
less: {
dev: {
files: {
'<%= project.assets %>/css/style.min.css': '<%= project.css %>'
}
},
dist: {
options: {
cleancss: true
},
files: {
'<%= project.assets %>/css/style.min.css': '<%= project.css %>'
}
}
},
imagemin: { // Task
dynamic: { // Another target
files: [{
expand: true, // Enable dynamic expansion
cwd: '<%= project.src %>/img', // Src matches are relative to this path
src: ['**/*.{png,jpg,gif}'], // Actual patterns to match
dest: '<%= project.assets %>/img' // Destination path prefix
}]
}
},
open: {
server: {
path: 'http://localhost:<%= connect.options.port %>'
}
},
watch: {
concat: {
files: '<%= project.src %>/js/{,*/}*.js',
tasks: ['concat:dev', 'jshint']
},
less: {
files: '<%= project.src %>/less/{,*/}*.less',
tasks: ['less:dev']
},
livereload: {
options: {
livereload: LIVERELOAD_PORT
},
files: [
'<%= project.app %>/{,*/}*.html',
'<%= project.assets %>/css/*.css',
'<%= project.assets %>/js/{,*/}*.js',
'<%= project.assets %>/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
]
}
}
};
grunt.registerTask('default', [
'less:dev',
'concat:dev',
'connect:livereload',
'open',
'watch'
]);
grunt.registerTask('build', [
'less:dist',
'uglify',
'imagemin'
]);
已解决:
使用Vagrant,重新加载的唯一重要事情是在树枝模板上设置监视任务。
这是我所做的gruntfile.js
编辑:
实时加载:{ 选项:{ 活重载:LIVERELOAD_PORT }, 文件: [ ... '<%= project.views %>/{,*/}*.html.twig', '... ] }
然后在来宾计算机上设置其他端口:
var LIVERELOAD_PORT = 35728;
然后在您的Vagrantfile
上设置从访客到主机的转发,使用livereload chrome扩展程序正在侦听的正确端口 (35729)
config.vm.network :forwarded_port, 来宾: 35728, 主机: 35729
一切都像魅力一样工作。