如何从FAKE运行NPM?
重要提示: 由于这是我想很多人都想做的事情,所以我添加了一个助手来FAKE to do: 问题从这里开始: 我试图从Fake运行NPM,但由于某些原因,它不起作用 我的假目标是这样的:如何从FAKE运行NPM?,npm,f#-fake,f#-fake-4,Npm,F# Fake,F# Fake 4,重要提示: 由于这是我想很多人都想做的事情,所以我添加了一个助手来FAKE to do: 问题从这里开始: 我试图从Fake运行NPM,但由于某些原因,它不起作用 我的假目标是这样的: Target "Web" (fun _ -> let result = ExecProcess (fun info -> info.FileName <- "npm.cmd" info.Arguments <-
Target "Web" (fun _ ->
let result =
ExecProcess (fun info ->
info.FileName <- "npm.cmd"
info.Arguments <- "install ./src/FAKESimple.Web/"
info.WorkingDirectory <- "."
) (System.TimeSpan.FromMinutes 1.0)
if result <> 0 then failwith "Operation failed or timed out"
trace "Hello World from FAKE"
)
:: Created by npm, please don't edit manually.
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\.\node_modules\npm\bin\npm-cli.js" %*
) ELSE (
node "%~dp0\.\node_modules\npm\bin\npm-cli.js" %*
)
默认的npm.cmd
如下所示:
Target "Web" (fun _ ->
let result =
ExecProcess (fun info ->
info.FileName <- "npm.cmd"
info.Arguments <- "install ./src/FAKESimple.Web/"
info.WorkingDirectory <- "."
) (System.TimeSpan.FromMinutes 1.0)
if result <> 0 then failwith "Operation failed or timed out"
trace "Hello World from FAKE"
)
:: Created by npm, please don't edit manually.
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\.\node_modules\npm\bin\npm-cli.js" %*
) ELSE (
node "%~dp0\.\node_modules\npm\bin\npm-cli.js" %*
)
因此,%~dp0
似乎被解析为ExecProcess
的工作目录,而不是预期的npm.cmd
文件夹路径
你知道如何解决这个问题,或者npm应该如何从FAKE运行吗
更新
我有一个示例项目在这里进行了说明:
它要求安装节点
更新2:
我想我现在知道发生了什么,但不知道如何解决它。如果从常规命令行运行
npm
,一切正常,但如果运行“npm”
(注意引号),则会出现相同的错误。由于某种原因,%~dp0
会根据调用的方式得到不同的解决,这很奇怪。我正在使用FAKE和PAKET构建Angular 6应用程序,并将其打包到NuGet包中。构建我的应用程序的目标如下:
Target.create "BuildAngular"( fun _ ->
Trace.setBuildNumber (CreateInformationalVersion versionInfo)
Npm.run "buildproductive" (fun o -> { o with WorkingDirectory = "./src"})
Directory.Move("./src/dist/", dirAngularOutput)
ZipFile.CreateFromDirectory (dirAngularOutput, dirBuildOutput @@ "gui.zip")
)
参数“buildproductive”是我在脚本数组的package.json中定义的目标:
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"buildproductive": "node_modules/.bin/ng build --prod",
"test": "ng test",
"test:ci": "node_modules/.bin/ng test --karma-config=src/karma.ci.conf.js",
"test:headless": "node_modules/.bin/ng test --karma-config=src/karma.headless.conf.js",
"lint": "ng lint",
"e2e": "ng e2e"
}
你试过直接从fake运行npm吗,so info.FileName@halcwb,我不记得了,但我想是这样:)。现在一切都解决了,我还让其他人更容易对fake的节点帮助程序执行相同的操作。