javascript - serve - Gruntfile no funciona cuando se ejecuta el comando grunt build
grunt-cli (1)
Usé yeoman para crear mi estructura usando "yo webapp", excluí todos los extras durante el proceso de instalación a través de npm y descargué manualmente los archivos de arranque.
Estoy tratando de ejecutar el comando "grunt build" que debe tomar todo lo que está en la carpeta de la aplicación (y sus subcarpetas y su subcarpeta, etc.) y crear, compilar, concatenar y minimizar los archivos en una carpeta dist en el directorio principal ( en el mismo nivel que la aplicación), ya que estoy seguro de que cualquiera que haya usado yeoman y gruñido lo sabe.
Sin embargo, por alguna razón no lo haré y he intentado cambiar las rutas predeterminadas, etc, etc. en el archivo de texto para intentar que funcione, pero no funciona correctamente (para ser sincero, dice que no funciona en absoluto Es más apto, aunque dice en el cmd que lo hace).
Completa la tarea de compilación según el cmd ahora (no lo hizo antes, alegando que hubo un problema con la tarea imagemin, pero la modifiqué y funciona ahora (o eso dice)), pero cuando miro en la carpeta dist , solo hay un index.html y un archivo de estilos (que no incluye algunos de los archivos css que debería ...).
Aquí está la parte importante de mi estructura de carpetas:
Site
├───.tmp
│ ├───spec
│ └───styles
├───app
├───fonts
├───images
│ ├───home
│ ├───payments
│ └───profile
├───scripts
│ ├───JS
│ ├───PHP
└───styles
La carpeta .tmp se crea automáticamente por algún motivo, supongo que para ayudar a gruñir con algo, ya que se crea cuando guardo archivos en la carpeta de la aplicación y Grunt está mirando.
Todo lo que quiero es simple:
- Para poder ejecutar "grunt build"
- Para luego tener grunt ir a través de todas las carpetas y archivos
- Para concatenar, modificar, recrear, mover y crear archivos como se espera (si ha usado yeoman y gruñir juntos, sabrá a qué me refiero y espero, más acertadamente)
- Para salir en la carpeta dist
Si ayuda, los tipos de archivo en las carpetas son como usted esperaría, la carpeta de fuentes tiene [EOT, TTF, OTF, WOFF, SVG], las imágenes y sus subcarpetas usan [PNG, JPEG, GIF], los scripts tienen [JS, PHP] en sí mismo y sus subcarpetas y estilos tiene [SASS, SCSS, CSS], pero obviamente es solo el CSS que me importa moverme hacia dist.
Eso puede haber complicado su mente, pero espero que sepa lo que espero después de trabajar con yeoman y gruñir ante usted y pueda ayudarme a realizar las tareas y el movimiento.
Aquí está mi gruntfile tal como está:
// Generated on 2015-11-17 using
// generator-webapp 1.1.0
''use strict'';
// # Globbing
// for performance reasons we''re only matching one level down:
// ''test/spec/{,*/}*.js''
// If you want to recursively match all subfolders, use:
// ''test/spec/**/*.js''
module.exports = function (grunt) {
// Time how long tasks take. Can help when optimizing build times
require(''time-grunt'')(grunt);
// Automatically load required grunt tasks
require(''jit-grunt'')(grunt, {
useminPrepare: ''grunt-usemin''
});
// Configurable paths
var config = {
app: ''app'',
dist: ''dist''
};
// Define the configuration for all the tasks
grunt.initConfig({
// Project settings
config: config,
// Watches files for changes and runs tasks based on the changed files
watch: {
bower: {
files: [''bower.json''],
tasks: [''wiredep'']
},
babel: {
files: [''<%= config.app %>/scripts/{,*/}*.js''],
tasks: [''babel:dist'']
},
babelTest: {
files: [''test/spec/{,*/}*.js''],
tasks: [''babel:test'', ''test:watch'']
},
gruntfile: {
files: [''Gruntfile.js'']
},
styles: {
files: [''<%= config.app %>/styles/{,*/}*.css''],
tasks: [''newer:copy:styles'', ''postcss'']
}
},
browserSync: {
options: {
notify: false,
background: true,
watchOptions: {
ignored: ''''
}
},
livereload: {
options: {
files: [
''<%= config.app %>/{,*/}*.html'',
''.tmp/styles/{,*/}*.css'',
''<%= config.app %>/images/{,*/}*'',
''.tmp/scripts/{,*/}*.js''
],
port: 9000,
server: {
baseDir: [''.tmp'', config.app],
routes: {
''/bower_components'': ''./bower_components''
}
}
}
},
test: {
options: {
port: 9001,
open: false,
logLevel: ''silent'',
host: ''localhost'',
server: {
baseDir: [''.tmp'', ''./test'', config.app],
routes: {
''/bower_components'': ''./bower_components''
}
}
}
},
dist: {
options: {
background: false,
server: ''<%= config.dist %>''
}
}
},
// Empties folders to start fresh
clean: {
dist: {
files: [{
dot: true,
src: [
''.tmp'',
''<%= config.dist %>/*'',
''!<%= config.dist %>/.git*''
]
}]
},
server: ''.tmp''
},
// Make sure code styles are up to par and there are no obvious mistakes
eslint: {
target: [
''Gruntfile.js'',
''<%= config.app %>/scripts/{,*/}*.js'',
''!<%= config.app %>/scripts/vendor/*'',
''test/spec/{,*/}*.js''
]
},
// Mocha testing framework configuration options
mocha: {
all: {
options: {
run: true,
urls: [''http://<%= browserSync.test.options.host %>:<%= browserSync.test.options.port %>/index.html'']
}
}
},
// Compiles ES6 with Babel
babel: {
options: {
sourceMap: true
},
dist: {
files: [{
expand: true,
cwd: ''<%= config.app %>/scripts/*'',
src: ''{,*/}*.js'',
dest: ''.tmp/scripts'',
ext: ''.js''
}]
},
test: {
files: [{
expand: true,
cwd: ''test/spec'',
src: ''{,*/}*.js'',
dest: ''.tmp/spec'',
ext: ''.js''
}]
}
},
postcss: {
options: {
map: true,
processors: [
// Add vendor prefixed styles
require(''autoprefixer'')({
browsers: [''> 1%'', ''last 2 versions'', ''Firefox ESR'']
})
]
},
dist: {
files: [{
expand: true,
cwd: ''.tmp/styles/'',
src: ''{,*/}*.css'',
dest: ''.tmp/styles/''
}]
}
},
// Automatically inject Bower components into the HTML file
wiredep: {
app: {
src: [''<%= config.app %>/index.html''],
ignorePath: /^(/././/)*/././
}
},
// Renames files for browser caching purposes
filerev: {
dist: {
src: [
''<%= config.dist %>/scripts/{,*/}*.js'',
''<%= config.dist %>/styles/{,*/}*.css'',
''<%= config.dist %>/images/{,*/}*.*'',
''<%= config.dist %>/styles/fonts/{,*/}*.*'',
''<%= config.dist %>/*.{ico,png}''
]
}
},
// Reads HTML for usemin blocks to enable smart builds that automatically
// concat, minify and revision files. Creates configurations in memory so
// additional tasks can operate on them
useminPrepare: {
options: {
dest: ''<%= config.dist %>''
},
html: ''<%= config.app %>/index.html''
},
// Performs rewrites based on rev and the useminPrepare configuration
usemin: {
options: {
assetsDirs: [
''<%= config.dist %>'',
''<%= config.dist %>/images'',
''<%= config.dist %>/styles''
]
},
html: [''<%= config.dist %>/{,*/}*.html''],
css: [''<%= config.dist %>/styles/{,*/}*.css'']
},
// The following *-min tasks produce minified files in the dist folder
imagemin: {
dist: {
files: [{
expand: true,
cwd: ''<%= config.app %>/images/*'',
src: ''{,*/}*.*'',
dest: ''<%= config.dist %>/images''
}]
}
},
svgmin: {
dist: {
files: [{
expand: true,
cwd: ''<%= config.app %>/images'',
src: ''{,*/}*.svg'',
dest: ''<%= config.dist %>/images''
}]
}
},
htmlmin: {
dist: {
options: {
collapseBooleanAttributes: true,
collapseWhitespace: true,
conservativeCollapse: true,
removeAttributeQuotes: true,
removeCommentsFromCDATA: true,
removeEmptyAttributes: true,
removeOptionalTags: true,
// true would impact styles with attribute selectors
removeRedundantAttributes: false,
useShortDoctype: true
},
files: [{
expand: true,
cwd: ''<%= config.dist %>'',
src: ''{,*/}*.html'',
dest: ''<%= config.dist %>''
}]
}
},
cssmin: {
dist: {
files: {
''<%= config.dist %>/styles/main.css'': [
''.tmp/styles/{,*/}*.css'',
''<%= config.app %>/styles/{,*/}*.css''
]
}
}
},
uglify: {
dist: {
files: {
''<%= config.dist %>/scripts/scripts.js'': [
''<%= config.dist %>/scripts/scripts.js''
]
}
}
},
concat: {
dist: {}
},
// Copies remaining files to places other tasks can use
copy: {
dist: {
files: [{
expand: true,
dot: true,
cwd: ''<%= config.app %>'',
dest: ''<%= config.dist %>'',
src: [
''*.{ico,png,txt}'',
''images/{,*/}*.webp'',
''{,*/}*.html'',
''styles/fonts/{,*/}*.*''
]
}]
},
styles: {
expand: true,
dot: true,
cwd: ''<%= config.app %>/styles'',
dest: ''.tmp/styles/'',
src: ''{,*/}*.css''
}
},
// Run some tasks in parallel to speed up build process
concurrent: {
server: [
''babel:dist'',
''copy:styles''
],
test: [
''babel'',
''copy:styles''
],
dist: [
''babel'',
''copy:styles'',
''imagemin'',
''svgmin''
]
}
});
grunt.registerTask(''serve'', ''start the server and preview your app'', function (target) {
if (target === ''dist'') {
return grunt.task.run([''build'', ''browserSync:dist'']);
}
grunt.task.run([
''clean:server'',
''wiredep'',
''concurrent:server'',
''postcss'',
''browserSync:livereload'',
''watch''
]);
});
grunt.registerTask(''server'', function (target) {
grunt.log.warn(''The `server` task has been deprecated. Use `grunt serve` to start a server.'');
grunt.task.run([target ? (''serve:'' + target) : ''serve'']);
});
grunt.registerTask(''test'', function (target) {
if (target !== ''watch'') {
grunt.task.run([
''clean:server'',
''concurrent:test'',
''postcss''
]);
}
grunt.task.run([
''browserSync:test'',
''mocha''
]);
});
grunt.registerTask(''build'', [
''clean:dist'',
''wiredep'',
''useminPrepare'',
''concurrent:dist'',
''postcss'',
''concat'',
''cssmin'',
''uglify'',
''copy:dist'',
''filerev'',
''usemin'',
''htmlmin''
]);
grunt.registerTask(''default'', [
''newer:eslint'',
''test'',
''build''
]);
};
Tomaría capturas de pantalla para mostrarle el problema, pero como dije, cuando ejecuto "grunt build", pasa de acuerdo con el CMD pero no hace lo que se espera, como expliqué.
Si necesita alguna aclaración, hágamelo saber.
Aclamaciones,
-- DAKOTA DEL SUR
Nunca dijiste si una aplicación web limpia funcionaba para ti. Como ya ha intentado volver a instalar yeoman, etc., y ha actualizado los módulos npm, intentaría generar un nuevo proyecto de aplicación web. Y sin tocarlo, ejecute grunt build para ver qué pasa.
yo webapp
bower install
grunt build
Si no funciona, publique el error que está recibiendo. Si funciona, copie los archivos / carpetas de su aplicación actual en el nuevo proyecto y vuelva a intentarlo.