(几个月以来)我一直在开发基于CRA的Web应用程序。直到今天早上,一切都按预期进行,直到我意识到npm(或yarn)启动脚本不再使用在Chrome中打开的现有标签。而是在localhost:3000处打开一个新选项卡,即使在localhost:3000处已存在选项卡。我已经对此进行了几个小时的调查,但尚未找到解决方案。我在CRA脚本中(在我的节点模块内)添加了一条日志语句,该语句用于在应用程序启动时处理现有选项卡的重用。
function startBrowserProcess(browser, url) {
// If we're on OS X, the user hasn't specifically
// requested a different browser, we can try opening
// Chrome with AppleScript. This lets us reuse an
// existing tab when possible instead of creating a new one.
const shouldTryOpenChromeWithAppleScript =
process.platform === 'darwin' &&
(typeof browser !== 'string' || browser === OSX_CHROME);
if (shouldTryOpenChromeWithAppleScript) {
try {
// Try our best to reuse existing tab
// on OS X Google Chrome with AppleScript
execSync('ps cax | grep "Google Chrome"');
execSync('osascript openChrome.applescript "' + encodeURI(url) + '"', {
cwd: __dirname,
stdio: 'ignore',
});
return true;
} catch (err) {
console.log(err);
// Ignore errors.
}
}
这是log语句的输出:
{ Error: Command failed: osascript openChrome.applescript "http://localhost:3000/"
at checkExecSyncError (child_process.js:621:11)
at execSync (child_process.js:658:13)
at startBrowserProcess (/Users/***/Desktop/WorkSpace/React/***/node_modules/react-dev-utils/openBrowser.js:78:7)
at openBrowser (/Users/***/Desktop/WorkSpace/React/***/node_modules/react-dev-utils/openBrowser.js:122:14)
at Server.devServer.listen.err (/Users/***/Desktop/WorkSpace/React/***/node_modules/react-scripts/scripts/start.js:100:7)
at Server.returnValue.listeningApp.listen (/Users/***/Desktop/WorkSpace/React/***/node_modules/webpack-dev-server/lib/Server.js:604:10)
at Object.onceWrapper (events.js:273:13)
at Server.emit (events.js:182:13)
at emitListeningNT (net.js:1328:10)
at process.internalTickCallback (internal/process/next_tick.js:72:19)
status: 1,
signal: null,
output: [ null, null, null ],
pid: 2691,
stdout: null,
stderr: null }
运行处理该问题的Applescript命令似乎有问题,但我不确定为什么。在本地使用同一应用程序的其他开发人员之一没有此问题。我最近所做的一项更改是升级到新的macOS Mojave。但是其他开发人员也刚刚进行了升级,因此没有此问题。
有人知道怎么了吗?
答案 0 :(得分:1)
为避免打开新标签页, 您需要在项目的根目录中创建一个.env文件,并添加以下行, 浏览器=无。 如图here
答案 1 :(得分:0)
在升级Mojave之后,我拒绝了从终端访问Google Chrome的界面。因此它无法运行“重用”标签脚本。