tutorial - requirejs download
Cómo excluir ciertos archivos requireJS de uglifying/optimizing (2)
Estaba teniendo el mismo problema de que las bibliotecas externas se volvían a minimizar como comentarios a la respuesta, y este es el método que utilizo para solucionarlo. Tengo dos tareas, una para mi código y otra para las bibliotecas externas. Realmente es solo copiar archivos, por lo que una tarea de copia también funcionaría. También uso el teclado "vacío:" para las bibliotecas externas para que no estén incluidas en las minificaciones de mi código.
requirejs: {
options: {
mainConfigFile: ''...'',
fileExclusionRegExp ''...common things to exclude...''
},
main: {
options: {
baseUrl: ''.../js'',
dir: ''.../js-built'',
fileExclusionRegExp: /^external$/,
... etc ...
}
},
external: {
options: {
baseUrl: ''.../js/external'',
dir: ''.../js-built/external'',
optimize: ''none''
}
}
}
Tengo un proyecto de trabajo que está utilizando grunt para la construcción y la implementación. Si no se utiliza ninguna optimización, la compilación funciona sin problemas y obtengo un archivo js grande para implementarlo en producción.
El problema que tengo es que tengo algunos marcos externos (como angularJS) donde ya tengo una versión minimizada / optimizada de la misma y no quiero volver a optimizarla.
Actualmente, sin optimización, incluyo la versión minificada de este marco mediante una configuración de ruta separada en mi archivo de grunt. Mientras que en mi main.js normal tengo la versión no minificada para desarrollo.
Ahora quiero usar el optimizador para optimizar mi propio código, pero para NO optimizar los marcos externos. Pero los marcos externos deben incluirse en el archivo javascript grande resultante. Básicamente, quiero decirle al optimizador que debe usar el archivo original en algunos casos.
¿Puedo hacerlo algo como esto?
Solo he encontrado una opción de exclusión global, por lo que algunos módulos no están incluidos en los js optimizados resultantes.
Esta es mi configuración de gruñido:
requirejs: {
compile: {
options: {
baseUrl: "<%= pkg.folders.jsSource %>",
name: "../external-libs/almond-0.1.1",
include: "main",
mainConfigFile: "<%= pkg.folders.jsSource %>/main.js",
out: "<%= pkg.folders.build + pkg.name + ''-'' + pkg.version %>/js/main.js",
//logLevel: 0,
optimize: "uglify2",
//optimize: "none",
paths: {
''angular'':''../external-libs/min/angular-1.0.4'',
''jquery'':''../external-libs/min/jquery-1.7.2'',
''jquery.mobile'':''../external-libs/min/jquery.mobile-1.2.0'',
''adapter'': ''../external-libs/min/jquery-mobile-angular-adapter-1.2.0'',
''moment'': ''../external-libs/moment-1.6.2.min'',
''iscroll'': ''../external-libs/min/iscroll-4.2.5'',
''iscrollview'': ''../external-libs/min/jquery.mobile.iscrollview-1.2.6'',
''add2Home'': ''../external-libs/min/add2home'',
''config/config'': "config/<%=configDatei%>"
}
}
}
},
Y esta es la parte relevante de main.js:
require.config({
paths:{
''angular'':''../external-libs/angular-1.0.4'',
''jquery'':''../external-libs/jquery-1.7.2'',
''jquery.mobile'':''../external-libs/jquery.mobile-1.2.0'',
''adapter'': ''../external-libs/jquery-mobile-angular-adapter-1.2.0'',
''moment'': ''../external-libs/moment-1.6.2.min'',
''iscroll'': ''../external-libs/iscroll-4.2.5'',
''iscrollview'': ''../external-libs/jquery.mobile.iscrollview-1.2.6'',
''add2Home'': ''../external-libs/add2home''
},
shim:{
''angular'':{ deps:[''jquery''], exports:''angular'' },
''iscroll'':{ deps:[''jquery''], exports:''iscroll'' },
''iscrollview'':{ deps:[''jquery.mobile'', ''iscroll''], exports:''iscrollview'' }
}
});
Gracias por cualquier ayuda.
Solo algunas sugerencias usan vacío: para indicar NO para incluir el módulo en la optimización.
En require.config indicará el uso del archivo min.
requirejs: {
compile: {
options: {
{{ all other settings }}
paths: {
''angular'':''empty:'',
}
}
}
},
require.config:{
paths:{
''angular'':''../external-libs/min/angular-1.0.4'',
},
}
Tenga en cuenta que eso es " vacío: " con dos puntos al final , no "vacío". Si omites los dos puntos, obtendrás un error como este:
"No such file or directory [...]/empty.js"
Espero que esto ayude.