gpt4 book ai didi

npm - Phoenix 框架 - 在子目录中执行 NPM 脚本

转载 作者:行者123 更新时间:2023-12-04 02:00:51 26 4
gpt4 key购买 nike

在我的 Phoenix 应用程序中,我正在运行一个位于应用程序内 assets/ 目录中的 React 前端...它有自己的 package.json 文件,我希望能够从 Phoenix 应用程序的 mix.exs 文件运行带别名的 NPM 脚本。我一直在试验 Elixir 的 System.cmd(),但它似乎并没有起到作用。

基本上,我已经为我的前端设置了一个 lint 命令 - 在 assets/package.json 中,我有

"lint": "eslint ./*.js ./js/*.js || exit 0"

并从 assets/ 目录运行 $ npm run lint 可以按预期工作...但是如果能够从应用程序的顶级。

在我的 mix.exs 文件中,我尝试使用这样的别名:

defp aliases do
[
"lint": [System.cmd("npm", ["run lint"], cd: "assets")
]
end

但是运行 mix lint 会产生一个非常冗长的错误:

** (FunctionClauseError) no function clause matching in Mix.Task.run_alias/3    

The following arguments were given to Mix.Task.run_alias/3:

# 1
[{"\nUsage: npm <command>\n\nwhere <command> is one of:\n access, adduser, bin, bugs, c, cache, completion, config,\n ddp, dedupe, deprecate, dist-tag, docs, edit, explore, get,\n help, help-search, i, init, install, install-test, it, link,\n list, ln, login, logout, ls, outdated, owner, pack, ping,\n prefix, prune, publish, rb, rebuild, repo, restart, root,\n run, run-script, s, se, search, set, shrinkwrap, star,\n stars, start, stop, t, tag, team, test, tst, un, uninstall,\n unpublish, unstar, up, update, v, version, view, whoami\n\nnpm <cmd> -h quick help on <cmd>\nnpm -l display full usage info\nnpm help <term> search for help on <term>\nnpm help npm involved overview\n\nSpecify configs in the ini-formatted file:\n /Users/user/.npmrc\nor on the command line via: npm <command> --key value\nConfig info can be viewed via: npm help config\n\nnpm@3.10.10 /Users/user/.nvm/versions/node/v6.11.1/lib/node_modules/npm\n", 1}]

# 2
[]

# 3
:ok

Attempted function clauses (showing 3 out of 3):

defp run_alias([h | t], alias_args, _res) when is_binary(h)
defp run_alias([h | t], alias_args, _res) when is_function(h, 1)
defp run_alias([], _alias_task, res)

(mix) lib/mix/task.ex:331: Mix.Task.run_alias/3
(mix) lib/mix/task.ex:266: Mix.Task.run/2
(mix) lib/mix/cli.ex:75: Mix.CLI.run_task/2
(elixir) lib/code.ex:376: Code.require_file/2

好吧,很明显我做错了什么。是否可以在 Phoenix 应用程序的子目录上执行 NPM 命令?

最佳答案

首先,runlint 应该是参数列表中的单独字符串。

其次,您拥有的代码将立即运行命令,而不是在调用别名时运行。

您可以使用 "run -e ..." 别名在这样的别名中执行任意代码:

"lint": [~s|run -e 'System.cmd("npm", ["run", "lint"], cd: "assets")'|)

(我使用 ~s|| 语法只是为了更容易键入带有单引号和双引号的字符串。)

关于npm - Phoenix 框架 - 在子目录中执行 NPM 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47383020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com