open
打开 URL、文件、可执行文件等。跨平台。
此包旨在用于命令行工具和脚本,而非浏览器。
如果你需要在 Electron 中使用,请使用 shell.openPath()。
此包不提供任何安全保证。如果你传入不可信的输入,由你负责对其进行适当的清理。
为什么?
- 积极维护。
- 支持应用参数。
- 更安全,因为它使用
spawn而不是exec。 - 修复了原始
node-open的大部分问题。 - 包含最新的
xdg-open脚本,用于 Linux。 - 支持 WSL 路径到 Windows 应用。
安装
npm install open
警告: 此包为原生 ESM,不再提供 CommonJS 导出。如果您的项目使用 CommonJS,您将不得不 转换为 ESM 或使用 动态 import() 函数。请勿就 CommonJS / ESM 相关问题提交 issue。
用法
import open, {openApp, apps} from 'open';
// Opens the image in the default image viewer and waits for the opened app to quit.
await open('unicorn.png', {wait: true});
console.log('The image viewer app quit');
// Opens the URL in the default browser.
await open('https://sindresorhus.com');
// Opens the URL in a specified browser.
await open('https://sindresorhus.com', {app: {name: 'firefox'}});
// Specify app arguments.
await open('https://sindresorhus.com', {app: {name: 'google chrome', arguments: ['--incognito']}});
// Opens the URL in the default browser in incognito mode.
await open('https://sindresorhus.com', {app: {name: apps.browserPrivate}});
// Open an app.
await openApp('xcode');
// Open an app with arguments.
await openApp(apps.chrome, {arguments: ['--incognito']});
API
在 macOS 上使用命令 open,在 Windows 上使用 start,在其他平台上使用 xdg-open。
open(target, options?)
返回一个针对 spawned child process 的 promise。通常你不需要用它做任何事情,但如果你希望附加自定义事件监听器或直接在生成的进程上执行其他操作,它可能很有用。
target
类型:string
你想要打开的内容。可以是 URL、文件或可执行文件。
使用文件类型的默认应用程序打开。例如,URL 会在你的默认浏览器中打开。
options
类型:object
wait
类型:boolean
默认值:false
在打开的应用程序退出之前等待,然后再兑现 promise。如果为 false,则在打开应用程序时立即兑现。
请注意,它等待的是应用程序退出,而不仅仅是窗口关闭。
在 Windows 上,你必须显式指定一个应用程序才能使其能够等待。
[!WARNING] 当浏览器已在运行时,在浏览器中打开 URL,
wait选项将不会按预期工作。浏览器使用单实例架构,新的 URL 会传递给现有进程,导致命令立即退出。在 macOS 上使用newInstance选项以强制启动新的浏览器实例,或者避免在浏览器中使用wait。
background (macOS only)
类型:boolean
默认值:false
不将应用程序置于前台。
newInstance (macOS only)
类型:boolean
默认值:false
即使应用程序已在运行,也打开该应用程序的新实例。
在其他平台上,始终会打开一个新实例。
app
类型:{name: string | string[], arguments?: string[]} | Array<{name: string | string[], arguments: string[]}>
指定用于打开 target 的应用的 name,以及可选的应用 arguments。app 可以是尝试打开的应用数组,name 可以是尝试的应用名称数组。如果每个应用都失败,将抛出最后一个错误。
应用名称因平台而异。请勿在可复用模块中硬编码。例如,Chrome 在 macOS 上是 google chrome,在 Linux 上是 google-chrome,在 Windows 上是 chrome。如果可能,请使用 apps,它会自动检测要使用的正确二进制文件。
您也可以传入应用的完整路径。例如,在 WSL 上,这可以是 Windows 安装的 Chrome 的 /mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe。
应用 arguments 因应用而异。请查阅应用文档以了解它接受哪些参数。
allowNonzeroExitCode
类型:boolean
默认值:false
当 wait 选项为 true 时,允许打开的应用以非零退出码退出。
我们不建议设置此选项。成功的约定是退出码为零。
openApp(name, options?)
打开一个应用。
返回一个 spawned child process 的 promise。通常您不需要使用它做任何事情,但如果您想附加自定义事件监听器或直接在生成的进程上执行其他操作,它可能很有用。
name
类型:string
应用名称因平台而异。请勿在可复用模块中硬编码。例如,Chrome 在 macOS 上是 google chrome,在 Linux 上是 google-chrome,在 Windows 上是 chrome。如果可能,请使用 apps,它会自动检测要使用的正确二进制文件。
您也可以传入应用程序的完整路径。例如,在 WSL 上,对于 Windows 版本的 Chrome,这可以是 /mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe。
options
类型:object
与 open 相同的选项,除了 app,并包含以下添加项:
arguments
类型:string[]
默认值:[]
传递给应用程序的参数。
这些参数取决于应用程序。请查阅应用程序的文档以了解其接受的参数。
apps
一个包含常见应用程序自动检测的二进制名称的对象。用于处理 跨平台差异。
import open, {apps} from 'open';
await open('https://google.com', {
app: {
name: apps.chrome
}
});
browser 和 browserPrivate 也可用于通过 default-browser 访问用户的默认浏览器。
支持的应用
chrome- 网页浏览器firefox- 网页浏览器edge- 网页浏览器brave- 网页浏览器browser- 默认网页浏览器browserPrivate- 隐身模式下的默认网页浏览器
browser 和 browserPrivate 仅支持 chrome、firefox、edge 和 brave。
WSL (Windows Subsystem for Linux)
当可用时,该包会自动使用 Windows 集成(PowerShell),如果 PowerShell 不可访问(例如在沙盒环境中),则回退到 xdg-open。
若要改用 Linux GUI 应用:
await open('https://example.com', {app: {name: 'xdg-open'}});
相关
- open-cli - 此模块的 CLI
- open-editor - 在编辑器中打开文件并定位到特定行和列
- reveal-file - 在系统文件管理器中显示文件