typescript - tecnicas - Código de Visual Studio compilar al guardar
tecnicas de estudio auditivo (13)
Actualización de mayo de 2018:
A partir de mayo de 2018, ya no necesita crear
tsconfig.json
manualmente o configurar el corredor de tareas.
-
Ejecute
tsc --init
en su carpeta de proyecto para crear el archivotsconfig.json
(si aún no tiene uno). -
Presione
Ctrl + Shift + B
para abrir una lista de tareas en VS Code y seleccione
tsc: watch - tsconfig.json
. - ¡Hecho! Su proyecto se recompila en cada archivo guardado.
Puede tener varios archivos
tsconfig.json
en su espacio de trabajo y ejecutar múltiples compilaciones a la vez si lo desea (por ejemplo, frontend y backend por separado).
Respuesta original:
Puedes hacer esto con los comandos Build:
Cree un
tsconfig.json
simple con
"watch": true
(esto le indicará al compilador que vea todos los archivos compilados):
{
"compilerOptions": {
"target": "es5",
"out": "js/script.js",
"watch": true
}
}
Tenga en cuenta que la matriz de
files
se omite, de forma predeterminada se
*.ts
todos los archivos
*.ts
en todos los subdirectorios.
Puede proporcionar cualquier otro parámetro o cambiar el
target
/
out
, solo asegúrese de que
watch
esté configurado como
true
.
Configure su tarea (
Ctrl + Shift + P
->
Configure Task Runner
):
{
"version": "0.1.0",
"command": "tsc",
"showOutput": "silent",
"isShellCommand": true,
"problemMatcher": "$tsc"
}
Ahora presiona Ctrl + Shift + B para construir el proyecto. Verá la salida del compilador en la ventana de salida ( Ctrl + Shift + U ).
El compilador compilará archivos automáticamente cuando se guarde.
Para detener la compilación, presione
Ctrl + P
-
> Tasks: Terminate Running Task
He creado una plantilla de proyecto específicamente para esta respuesta:
typescript-node-basic
¿Cómo puedo configurar Visual Studio Code para compilar archivos de mecanografía al guardar?
Veo que es posible configurar una tarea para construir el archivo en foco usando
${file}
como argumento.
Pero me gustaría que esto se haga cuando se guarde un archivo.
En lugar de crear un solo archivo y vincular Ctrl + S para activar esa compilación, recomendaría iniciar tsc en modo de observación utilizando el siguiente archivo task.json:
{
"version": "0.1.0",
"command": "tsc",
"isShellCommand": true,
"args": ["-w", "-p", "."],
"showOutput": "silent",
"isWatching": true,
"problemMatcher": "$tsc-watch"
}
Esto una vez construirá todo el proyecto y luego reconstruirá los archivos que se guardan independientemente de cómo se guardan (Ctrl + S, guardado automático, ...)
Estado actual de este problema:
Implementé la compilación al guardar con la tarea gulp-typescript usando gulp-typescript y compilación incremental. Esto permite controlar la compilación lo que quieras. Observe mi variable tsServerProject, en mi proyecto real también tengo tsClientProject porque quiero compilar mi código de cliente sin ningún módulo especificado. Como sé, no puedes hacerlo con código vs.
var gulp = require(''gulp''),
ts = require(''gulp-typescript''),
sourcemaps = require(''gulp-sourcemaps'');
var tsServerProject = ts.createProject({
declarationFiles: false,
noExternalResolve: false,
module: ''commonjs'',
target: ''ES5''
});
var srcServer = ''src/server/**/*.ts''
gulp.task(''watch-server'', [''compile-server''], watchServer);
gulp.task(''compile-server'', compileServer);
function watchServer(params) {
gulp.watch(srcServer, [''compile-server'']);
}
function compileServer(params) {
var tsResult = gulp.src(srcServer)
.pipe(sourcemaps.init())
.pipe(ts(tsServerProject));
return tsResult.js
.pipe(sourcemaps.write(''./source-maps''))
.pipe(gulp.dest(''src/server/''));
}
Puedo decir que con la última versión de TypeScript 1.8.X y 1.0 del código de Visual Studio, la técnica que mostré es obsoleta. Simplemente use un tsconfig.json en el nivel raíz de su proyecto y todo funciona automáticamente para la verificación de sintaxis. Luego use tsc -w en la línea de comando para ver / recompilar automáticamente. Leerá el mismo archivo tsconfig.json para ver las opciones y la configuración de la compilación ts.
// tsconfig.json
{
"compilerOptions": {
"module": "amd",
"target": "ES5",
"noImplicitAny": false,
"removeComments": true,
"preserveConstEnums": true,
"inlineSourceMap": true
},
"exclude": [ "node_modules" ]
}
Seleccione Preferencias -> Configuración del espacio de trabajo y agregue el siguiente código, si tiene habilitada la recarga en caliente, los cambios se reflejarán inmediatamente en el navegador
{
"files.exclude": {
"**/.git": true,
"**/.DS_Store": true,
"**/*.js.map": true,
"**/*.js": {"when": "$(basename).ts"}
},
"files.autoSave": "afterDelay",
"files.autoSaveDelay": 1000
}
Si desea evitar tener que usar
CTRL
+
SHIFT
+
B
y, en cambio, desea que esto ocurra cada vez que guarde un archivo, puede vincular el comando al mismo atajo que la acción de guardar:
[
{
"key": "ctrl+s",
"command": "workbench.action.tasks.build"
}
]
Esto va en su keybindings.json - (diríjase a esto usando Archivo -> Preferencias -> Atajos de teclado).
Si presionar Ctrl + Shift + B parece un gran esfuerzo, puede activar "Guardar automáticamente" (Archivo> Guardar automáticamente) y usar NodeJS para ver todos los archivos en su proyecto, y ejecutar TSC automáticamente.
Abra un símbolo del sistema Node.JS, cambie el directorio a la carpeta raíz del proyecto y escriba lo siguiente;
tsc -w
Y bueno, cada vez que VS Code auto guarda el archivo, TSC lo recompilará.
Esta técnica se menciona en una publicación de blog;
http://www.typescriptguy.com/getting-started/angularjs-typescript/
Desplácese hacia abajo hasta "Compilar al guardar"
Una forma extremadamente simple de autocompilar al guardar es escribir lo siguiente en el terminal:
tsc main --watch
donde
main.ts
es tu nombre de archivo.
Tenga en cuenta que esto solo se ejecutará mientras este terminal esté abierto, pero es una solución muy simple que se puede ejecutar mientras edita un programa.
probé los métodos anteriores, pero el mío dejó de compilar automáticamente cuando lo deseaba, debido a que el número máximo de archivos para ver ha pasado el límite.
ejecute el comando
cat /proc/sys/fs/inotify/max_user_watches
.
si muestra menos recuento de archivos, incluidos node_modules, abra el archivo
/etc/sysctl.conf
en el privilegio de root y agregue
fs.inotify.max_user_watches=524288
en el archivo y guardar
ejecute nuevamente el comando cat para ver el resultado. ¡Funcionará! ¡Ojalá!
Actualizado
En tu
tsconfig.json
"compileOnSave": true, // change to true
Si el problema persiste, cambie cualquier ruta, vuelva a ejecutarla y guarde la aplicación. Comenzará a compilar, es decir
const routes: Routes = [
{
path: '''', // i.e. remove , (comma) and then insert and save, it''ll compile
component: VersionsComponent
}
]
Espero que esto ayude a alguien. Aunque esta no es la solución permanente, funciona hasta que obtenga una solución mejor.
Escribir una extensión
Ahora que vscode es extensible, es posible conectarse al evento on save mediante una extensión. Puede encontrar una buena descripción general de las extensiones de escritura para VSCode aquí: https://code.visualstudio.com/docs/extensions/overview
Aquí hay un ejemplo simple que solo llama a
echo $filepath
y genera stdout en un diálogo de mensaje:
import * as vscode from ''vscode'';
import {exec} from ''child_process'';
export function activate(context: vscode.ExtensionContext) {
vscode.window.showInformationMessage(''Run command on save enabled.'');
var cmd = vscode.commands.registerCommand(''extension.executeOnSave'', () => {
var onSave = vscode.workspace.onDidSaveTextDocument((e: vscode.TextDocument) => {
// execute some child process on save
var child = exec(''echo '' + e.fileName);
child.stdout.on(''data'', (data) => {
vscode.window.showInformationMessage(data);
});
});
context.subscriptions.push(onSave);
});
context.subscriptions.push(cmd);
}
(También se hace referencia en esta pregunta SO: https://.com/a/33843805/20489 )
Extensión VSCode existente
Si solo desea instalar una extensión existente, aquí hay una que escribí disponible en la galería VSCode: extension
El código fuente está disponible aquí: https://github.com/emeraldwalk/vscode-runonsave/blob/master/src/extension.ts