javascript - serve - npm grunt
Comprender gruntjs registerTask colon (1)
Actualmente estoy tratando de aprender gruntjs para desarrolladores y producción.
Quiero asignar una variable de configuración global para determinar cosas. Tengo un simple initConfig
:
grunt.initConfig({
foo: {
bar: {GLOBAL: true},
baz: {GLOBAL: false}
}
});
grunt.registerTask(''one'', [''foo:bar'']);
grunt.registerTask(''two'', [''foo:baz'']);
Mi pregunta es:
¿Qué está haciendo exactamente el colon en mis tareas? (
foo:bar
ofoo:baz
)¿Y cuál es la diferencia entre un colon y un simple punto?
Mi objetivo es tener una variable global establecida en true
o false
para su posterior procesamiento:
grunt.initConfig({
foo: {
bar: {GLOBAL: true},
baz: {GLOBAL: false}
},
awesomestuff: {
smth: GLOBAL ? ''yes'' : ''no'',
another: !Global ? ''DoDebug'' : ''MakeRelease''
}
});
grunt.registerTask(''one'', [''foo:bar'', ''awesomestuff'']);
grunt.registerTask(''two'', [''foo:baz'', ''awesomestuff'']);
¿Cómo lograría esto?
Actualizar
Obtuve la variable global funcionando de alguna manera. Al registrar una nueva tarea nueva llamada init
con un argumento, puedo llamarla en otra tarea.
grunt.registerTask(''init'', ''Init'', function(param) {
grunt.config(''GLOBAL'', param)
});
grunt.registerTask(''one'', [''init:true'', ''foo:bar'', ''awesomestuff'']);
En este caso, se llamará a la tarea init
con el parámetro varable configurado en true
. Pero la pregunta es todavía:
¿Por qué debería usar un signo de un punto para hacer referencia a un objeto?
¿Por qué debería usar dos puntos en lugar de un punto para hacer referencia a un objeto?
Para comprender por qué, primero necesita comprender configuraciones y objetivos de tareas de grunt .
Único objetivo
Para ayudarlo a comprender mejor este concepto y la terminología, eche un vistazo a esta configuración de ejemplo para un plugin grunt-contrib-copy
llamado grunt-contrib-copy
. Es un complemento que copia archivos. Debajo hay un fragmento de ese código:
grunt.initConfig({
copy: { // <-- Task
main: { // <-- Target
// ... <-- other configurations go here.
}
}
});
En este ejemplo anterior, la tarea se llama copy
e incluye un único objetivo denominado main
.
Para registrar esta tarea , debe hacerlo de la siguiente manera:
grunt.registerTask(''copyFiles'', [''copy:main'']);
e ingresaría lo siguiente a través de su línea de comando para ejecutarlo:
$ grunt copyFiles
Objetivos múltiples
Grunt Tasks también puede incluir más de un objetivo . Considere este código de ejemplo a continuación:
grunt.initConfig({
copy: {
js: {
// ... <-- Additional configurations for this Target go here.
},
css: {
// ... <-- Additional configurations for this Target go here.
}
}
});
Puede registrar el ejemplo anterior de la siguiente manera:
grunt.registerTask(''copyJavaScriptFiles'', [''copy:js'']);
grunt.registerTask(''copyCssFiles'', [''copy:css'']);
Entonces, a través de la línea de comando:
Ejecutando
$ grunt copyJavaScriptFiles
copiará todos los archivos JS de acuerdo con las configuraciones especificadas.Ejecutando
$ grunt copyCssFiles
copiará todos los archivos CSS de acuerdo con las configuraciones especificadas.
Si desea copiar los archivos JS y CSS, puede registrar una tarea de la siguiente manera:
grunt.registerTask(''copyAll'', [''copy'']);
Y lo ejecutaría ingresando $ grunt copyAll
en su línea de comando.
Observe que en el último ejemplo no incluye ningún signo de dos puntos :
Grunt esta vez ejecutará todos los Targets
en la tarea de copy
, es decir, el js
one y el css
one.
¿Y cuál es la diferencia entre un colon y un simple punto?
Colon
Afortunadamente, ahora puedes ver lo que hace el colon :
Se utiliza para hacer referencia a un objetivo en particular dentro de una tarea y, por lo general, solo se utiliza cuando una tarea tiene múltiples objetivos y desea hacer referencia específica a uno de ellos.
Punto simple
El punto simple es la notación estándar de JavaScript para acceder a las propiedades de un objeto. Google "notación de JavaScript" para obtener más información sobre la notación de puntos y la notación de corchetes .
Dentro del contexto de su Gruntfile.js, la notación de puntos se usa generalmente para llamar a las funciones / métodos / propiedades del objeto grunt
. Por ejemplo:
grunt.initConfig({...});
grunt.loadNpmTasks(...);
grunt.registerTask(...);
EDITAR 1 actualizó la respuesta después de actualizar la publicación / pregunta original.