如何从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 <-

重要提示:

由于这是我想很多人都想做的事情,所以我添加了一个助手来FAKE to do:

问题从这里开始:

我试图从Fake运行NPM,但由于某些原因,它不起作用

我的假目标是这样的:

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的节点帮助程序执行相同的操作。