在Node.js中复制到剪贴板?

Tow*_*wer 67 javascript clipboard node.js

有没有办法可以复制到Node.js中的剪贴板?任何模块或想法是什么?我在桌面应用程序上使用Node.js. 希望这能解清为什么我希望它能够实现这一目标.

Ben*_*kin 70

对于OS X:

function pbcopy(data) {
    var proc = require('child_process').spawn('pbcopy'); 
    proc.stdin.write(data); proc.stdin.end();
}
Run Code Online (Sandbox Code Playgroud)

write()可以采取缓冲区或字符串.字符串的默认编码为utf-8.

  • 这仅适用于 mac 操作系统 (5认同)
  • 这对于 REPL 中的快速数据转换非常有用。 (2认同)

Sin*_*hus 45

退房clipboardy.它允许您复制/粘贴跨平台.它比另一个答案中提到copy-paste模块更积极地维护,它修复了许多模块的问题.

const clipboardy = require('clipboardy');

// Copy
clipboardy.writeSync('');

// Paste
clipboardy.readSync();
//
Run Code Online (Sandbox Code Playgroud)

  • @PonmudiVN Windows 32 位支持已修复:https://github.com/sindresorhus/clipboardy/commit/3be3ee6b9b9cd736623fcc8ebb1aa9e0c42371b4 (3认同)
  • 该模块可以正常工作,并且维护良好。 (2认同)
  • 它比“复制粘贴”模块更好,因为它也支持双字节字符。但这在 Windows 32 位操作系统中存在问题。 (2认同)

Xav*_*avi 30

这是一个提供copypaste功能的模块:https://github.com/xavi-/node-copy-paste

require("copy-paste").global()被执行时,两个全局的功能添加:

> copy("hello") // Asynchronously adds "hello" to clipbroad
> Copy complete
> paste() // Synchronously returns clipboard contents
'hello'
Run Code Online (Sandbox Code Playgroud)

像上面提到的许多其他答案一样,要复制和粘贴节点,您需要调用外部程序.在这种情况下node-copy-paste,它调用pbcopy/pbpaste(对于OSX),xclip(对于Linux)和clip(对于Windows).

当我在REPL中为一个辅助项目做了大量工作时,这个模块非常有用.不用说,copy-paste它只是一个命令行实用程序 - 它不适用于服务器工作.

  • 为了SO政策,可能想添加你自己的代码 (4认同)
  • 这是最好的答案.它是跨平台的,并且按照它应该的方式工作. (2认同)

chj*_*hjj 15

剪贴板不是操作系统固有的.它是操作系统正在运行的任何窗口系统的构造.因此,如果您希望这在X上工作,则需要绑定到Xlib和/或XCB.节点的Xlib绑定实际存在:https://github.com/mixu/nwm.虽然我不确定它是否允许您访问X剪贴板,但您最终可能会编写自己的剪贴板.你需要单独的窗口绑定.

编辑:如果你想做一些hacky,你也可以使用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);
});
Run Code Online (Sandbox Code Playgroud)


Ern*_*nst 8

Windows中最短的方式:

require('child_process').spawn('clip').stdin.end(util.inspect("content_for_the_clipboard"));
Run Code Online (Sandbox Code Playgroud)

  • 这几乎有效:它复制带有单引号的字符串。有谁知道如何防止这种行为? (5认同)
  • 谢谢!不需要“util”依赖对我来说是这样的: require('child_process').spawn('clip').stdin.end("content_for_the_clipboard"); (3认同)
  • @m4cbeth,去掉“util.inspect”,不要勾选。require('child_process').spawn('clip').stdin.end('content_for_the_clipboard'); (2认同)