如何从 Swift 项目中的 Next.js 项目运行 yarn dev?

问题描述

在复制文件构建阶段,我有一个包含 Next.js 项目的目录,“仅在安装时复制”到“资源”目标。我还有一个 Resources 文件夹,其中包含 web 项目目录

在我的 AppDelegate 中,我正在加载目录,但不清楚如何在其中/在其上运行 yarn dev

if let url = Bundle.main.url(forResource: "web",withExtension: nil) {
  let process = Process()

  // Unsure what to do here to run `yarn dev` and start my local server. 

  do {
     try process.run()
  }

  catch {
     print("some error occurred")
     print("")
  }
}

我怎样才能让它正常工作?

谢谢!

编辑

这是一个全新的项目,所以我现在只使用 index.js 项目中的 web 文件。通常在终端中,我只需 cd 进入 web 并运行 yarn dev 以在 localhost:3000 处启动服务器,所以这基本上就是我在这里尝试做的。谢谢

以下是 Resources/web 文件夹的内容

enter image description here

解决方法

假设您已将 shell 脚本放在主应用程序的 Resources 文件夹中,并且您运行的是 macOS 10.13 或更高版本,请使用以下代码:

if let url = Bundle.main.url(forResource: "run_server",withExtension: "sh") {
     guard let resourcesURL = Bundle.main.resourceURL else { return }
     let webURL = resourcesURL.appendingPathComponent("web")
     let process = Process()
     process.launchPath = "/bin/bash"
     process.arguments = [url.path,webURL.path]
     
     do {
         try process.run()
     }

     catch {
         // handle any errors here
     }
}

关于你的脚本,我会使用这样的东西:

#!bin/bash

cd $1
yarn dev -p 3000

$1 将设置为作为第二个参数传递给将运行您的 shell 的 process 的路径。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...