¿Hay alguna forma de copiar al portapapeles en Node.js? ¿Algún módulo o idea que tal? Estoy usando Node.js en una aplicación de escritorio. Con suerte, eso aclara por qué quiero que pueda lograr esto.
Respuestas:
Un portapapeles no es inherente a un sistema operativo. Es una construcción de cualquier sistema de ventanas que el sistema operativo esté ejecutando. Entonces, si quisiera que esto funcionara en X, por ejemplo, necesitaría enlaces a Xlib y / o XCB. Los enlaces Xlib para el nodo realmente existen: https://github.com/mixu/nwm . Aunque no estoy seguro de si le da acceso al portapapeles X, es posible que termine escribiendo el suyo. Necesitará enlaces separados para ventanas.
editar: Si quieres hacer algo hacky, también puedes usar xclip:
var exec = require('child_process').exec;
var getClipboard = function(func) {
exec('/usr/bin/xclip -o -selection clipboard', function(err, stdout, stderr) {
if (err || stderr) return func(err || new Error(stderr));
func(null, stdout);
});
};
getClipboard(function(err, text) {
if (err) throw err;
console.log(text);
});
Para OS X:
function pbcopy(data) {
var proc = require('child_process').spawn('pbcopy');
proc.stdin.write(data); proc.stdin.end();
}
write()
puede tomar un búfer o una cadena. La codificación predeterminada para una cadena será utf-8.
Echa un vistazo clipboardy
. Te permite copiar / pegar multiplataforma. Se mantiene más activamente que el copy-paste
módulo mencionado en otra respuesta y soluciona muchos de los problemas de ese módulo.
const clipboardy = require('clipboardy');
// Copy
clipboardy.writeSync('🦄');
// Paste
clipboardy.readSync();
//🦄
çlipboardy
de npm en cypress. Tengo un botón en mi aplicación web, al hacer clic en ese botón debería obtener el contenido del portapapeles, pero no está definido, cualquier entrada es muy apreciada. Stackoverflow.com/questions/61650737/…
Aquí hay un módulo que proporciona copy
y paste
funciona: https://github.com/xavi-/node-copy-paste
Cuando require("copy-paste").global()
se ejecuta, se agregan dos funciones globales:
> copy("hello") // Asynchronously adds "hello" to clipbroad
> Copy complete
> paste() // Synchronously returns clipboard contents
'hello'
Como muchas de las otras respuestas mencionadas, para copiar y pegar en el nodo, debe llamar a un programa externo. En el caso de node-copy-paste
, llama a pbcopy/pbpaste
(para OSX), xclip
(para Linux) y clip
(para Windows).
Este módulo fue muy útil cuando estaba trabajando mucho en el REPL para un proyecto paralelo. Ni que decir tiene, copy-paste
es sólo una utilidad de línea de comandos - es no significaba para el trabajo del servidor.
Camino más corto en Windows:
const util = require("util");
require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));
util
primero.
ReferenceError: util is not defined
sin primero incluir const util = require("util")
que probé tanto en el proceso principal como en el de renderizado de Electon sin suerte. Dicho esto, desde el nodo 12.14.1 CLI funcionó. Creo que es seguro decir que debe definir util para estar seguro según el caso de uso.
Logré hacerlo creando una aplicación diferente que maneja esto. Ciertamente no es la mejor manera, pero funciona.
Estoy en Windows y creé una aplicación VB.NET:
Module Module1
Sub Main()
Dim text = My.Application.CommandLineArgs(0)
My.Computer.Clipboard.SetText(text)
Console.Write(text) ' will appear on stdout
End Sub
End Module
Luego, en Node.js, solía child_process.exec
ejecutar la aplicación VB.NET, con los datos que se copiarían pasados como un argumento de línea de comando:
require('child_process').exec(
"CopyToClipboard.exe \"test foo bar\"",
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Mac tiene una línea de comandos nativa pbcopy
para este caso de uso:
require('child_process').exec(
'echo "test foo bar" | pbcopy',
function(err, stdout, stderr) {
console.log(stdout); // to confirm the application has been run
}
);
Mismo código para Linux pero reemplaza pbcopy
con Xclip ( apt get install xclip
)
echo fooo | clip
. Ahora, ¿cómo tener esto en Linux sin pedirle al usuario que instale algo?
echo fooo | clip
puede funcionar, pero el resultado contendrá un '\ n' al final de la cadena principal, está fuera de lo esperado.
mira este portapapeles cero
npm instalar zeroclipboard