principiantes para ejercicios ejemplos descargar definicion codigo javascript gruntjs

para - javascript descargar



Usar variable global para establecer la ruta de salida de compilaciĆ³n en Grunt (3)

Entonces, estaba en el camino correcto. El problema es que el módulo se exporta antes de que se establezcan esas variables globales, por lo que no están definidas en tareas posteriores definidas dentro de la tarea initConfig ().

La solución que se me ocurrió, aunque, puede ser mejor, es sobrescribir un valor de grunt.option.

Tengo una opción opcional para mi tarea: objetivo

la solución de trabajo se ve así:

grunt.registerTask("setOutput", "Set the output folder for the build.", function () { if (global.buildType === "tfs") { global.outputPath = MACHINE_PATH; } if (global.buildType === "local") { global.outputPath = LOCAL_PATH; } if (global.buildType === "release") { global.outputPath = RELEASE_PATH; } if (grunt.option("target")) { global.outputPath = grunt.option("target"); } grunt.option("target", global.outputPath); grunt.log.writeln("Output path: " + grunt.option("target")); });

Y la tarea definida en initConfig () se veía así:

clean: { build: { src: ["<%= grunt.option(/"target/") %>"] } }

No dude en entrar si tiene una mejor solución. De lo contrario, quizás esto pueda ayudar a alguien más.

Tengo un par de tareas grupales y estoy tratando de compartir variables globales en esas tareas y me estoy encontrando con problemas.

He escrito algunas tareas personalizadas que establecen la ruta de salida adecuada en función del tipo de compilación. Esto parece estar configurando las cosas correctamente.

// Set Mode (local or build) grunt.registerTask("setBuildType", "Set the build type. Either build or local", function (val) { // grunt.log.writeln(val + " :setBuildType val"); global.buildType = val; }); // SetOutput location grunt.registerTask("setOutput", "Set the output folder for the build.", function () { if (global.buildType === "tfs") { global.outputPath = MACHINE_PATH; } if (global.buildType === "local") { global.outputPath = LOCAL_PATH; } if (global.buildType === "release") { global.outputPath = RELEASE_PATH; } if (grunt.option("target")) { global.outputPath = grunt.option("target"); } grunt.log.writeln("Output folder: " + global.outputPath); }); grunt.registerTask("globalReadout", function () { grunt.log.writeln(global.outputPath); });

Entonces, estoy tratando de hacer referencia a global.outputPath en una tarea posterior y ejecutar errores.

Si llamo a grunt test desde la línea de comando, genera la ruta correcta, no hay problema.

Sin embargo, si tengo una tarea como esta: clean: {release: {src: global.outputPath}}

Lanza el siguiente error: Warning: Cannot call method ''indexOf'' of undefined Use --force to continue.

Además, mis constantes en la tarea setOutput se establecen en la parte superior de mi Gruntfile.js

¿Alguna idea? ¿Estoy haciendo algo mal aquí?


Tengo una forma de hacer esto que te permite especificar la ruta de salida utilizando valores como --dev . Hasta ahora está funcionando muy bien, me gusta bastante. Pensé que lo compartiría, como a alguien más le gustaría, también.

# Enum for target switching behavior TARGETS = dev: ''dev'' dist: ''dist'' # Configurable paths and globs buildConfig = dist: "dist" dev: ''.devServer'' timestamp: grunt.template.today(''mm-dd_HHMM'') grunt.initConfig cfg: buildConfig cssmin: crunch: options: report: ''min'' files: "<%= grunt.option(''target'') %>/all-min.css": "/**/*.css" # Set the output path for built files. # Most tasks will key off this so it is a prerequisite setPath = -> if grunt.option ''dev'' grunt.option ''target'', buildConfig.dev else if grunt.option ''dist'' grunt.option ''target'', "#{buildConfig.dist}/#{buildConfig.timestamp}" else # Default path grunt.option ''target'', buildConfig.dev grunt.log.writeln "Output path set to: `#{grunt.option ''target''}`" grunt.log.writeln "Possible targets:" grunt.log.writeln target for target of TARGETS setPath()

Con esta configuración, puede ejecutar comandos como:

grunt cssmin --dist #sent to dist target grunt cssmin --dev #sent to dev target grunt cssmin --dev #sent to default target (dev)


Esta es una pregunta anterior, solo pensé en arrojar mis 5 centavos.

Si necesita que la variable de configuración sea accesible desde cualquier tarea, simplemente defínala en su archivo de configuración principal (el que siempre cargará) de esta manera:

module.exports = function(grunt) { // // Common project configuration // var config = { pkg: grunt.file.readJSON(''package.json''), options: // for ''project'' { dist: { outputPath: ''<%= process.cwd() %>/lib'', }, dev: { outputPath: ''<%= process.cwd() %>/build'', }, }, } grunt.config.merge( config ) }

Entonces puedes simplemente acceder a un valor como este:

  • en archivo (s) de configuración

... my_thingie: [ ends_up_here: ''<%= options.dev.outputPath %>/bundle'', ], ...

  • en tareas

// as raw value grunt.config.data.options.dist.outputPath // after (eventual) templates have been processed grunt.config(''options.dist.outputPath'')

Utilicé las options clave aquí solo para estar en línea con la convención, pero puede usar cualquier cosa siempre que recuerde no registrar una tarea llamada ''options'' o lo que sea que haya usado para la tecla :)