按照https://github.com/npm/read-cmd-shim/pull/6的说明,在安装全局软件包时会添加PowerShell脚本。 这会导致Windows上一些麻烦,需要添加安全标志来运行ps1脚本,否则会出现此错误
* * .ps1无法加载,因为此系统上禁用了运行脚本
以前,所有全局npm软件包都开箱即用,因为PowerShell会改用cmd脚本。 我预见到此添加将导致人们之间的许多混乱,尤其是在使用Windows(即PowerShell)上的Visual Studio Code内置终端的人们之间。
https://github.com/microsoft/TypeScript/issues/35031
https://stackoverflow.com/questions/58796490/tsc-ps1-can-be-loaded-because-running-scripts-is-disabled-on-this-system
以下一些更新的答案甚至建议删除ps1文件。
https://stackoverflow.com/questions/57673913/vsc-powershell-after-npm-updating-packages-ps1-can-be-loaded-because-runnin
@Cerlancism。 在powershell中键入以下命令
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
要么
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned-范围LocalMachine
运行.ps1 PowerShell脚本后
@Cerlancism
在https://github.com/npm/read-cmd-shim/pull/6中,我仅添加了Powershell支持的提取路径。
此功能适用于https://github.com/npm/cli/pull/281
如果您想知道为什么在安装软件包时添加* .ps,请参见: https :
当将管道输入传递给PowerShell脚本时, Node.js进程( https://github.com/npm/cmd-shim/pull/43 )的内置脚本。剧本。
刚在最新的机器上安装了最新的NPM,这在开箱即用的情况下非常令人讨厌。
只要您可以在计算机上执行任何操作, @ RAJU2529提供的解决方案就可以了。 在加入域的计算机上,即使用户是计算机的管理员,此设置也可以由组织设置来驱动,并且不能被覆盖。
除了降级NPM版本以外,还有其他解决方法吗?
删除npm bin目录中的所有*.ps1
脚本吗?
@ ExE-Boss这就是我现在结束的工作,但这确实是一种解决方法...
也同意以上内容。 比更改执行策略更好...我知道它可以正常运行,并且所有人都可能正在运行脚本,但是...完全是愚蠢的
我们最近将构建服务器更新为最新的节点LTS。
我们的某些PowerShell脚本使用如下代码:
Start-Process "npm-cli-login" [...] -NoNewWindow
如果您询问powershell它使用哪个可执行文件( (Get-Command npm-cli-login).Source
),则会得到新创建的ps1- Files而不是cmd 。
该过程以%1 is not a valid win32 application
退出,因为ps1-脚本不是有效的可执行文件。
这是一个版本中的重大更改,至少应进行审查。
删除npm bin目录中的所有
*.ps1
脚本吗?
我们是否有办法强制Windows在使用npm link
或npm i -g ../<package>
不创建.ps1
脚本? 必须一直在npm文件夹上并始终清除此混乱情况,这令人感到沮丧。
如果您的系统具有命令提示符,一种快速的解决方法是告诉PowerShell使用cmd版本: <package-name>.cmd
例如对于TypeScript:
代替
tsc -v
现在在PowerShell中调用tsc.ps1
采用tsc.cmd -v
如果您的系统具有命令提示符,一种快速的解决方法是告诉PowerShell使用cmd版本:
<package-name>.cmd
是的,如果添加.cmd
powershell使用正确的可执行文件。
但是,如果您拥有版本化的构建脚本,而该版本在发行后不应更改,则只有两种可能性:
添加了此功能的请求请求34将其作为npm问题20699的修复程序。 检查该问题,似乎核心问题是在Windows命令行上将&字符作为命令参数传递。 这被解释为命令分隔符,因此会出错。
但是,在Windows命令行中,我们可以使用尖号转义&字符。 ^&
远射,但这对于引入这些重大变化的实施方案是否可行? 有什么方法可以检测到将参数指定给Windows命令行和正则表达式,还是将插入号字符注入到参数中以进行转义? 像@ ExE-Boss老板这样的人是否知道我们是否有某些原因无法使用类似方法解决此问题?
以下文档介绍了处理Windows命令行参数解析的最佳方法。 用它作为指导吗?
https://docs.microsoft.com/zh-CN/archive/blogs/twistylittlepassagesallalike/everyone-quotes-command-line-arguments-the-wrong-way
我认为管道也无法使用与此相关的ps1脚本。
我正在尝试使用以下常用工具:
prettyjson
更漂亮
例如,当我在Powershell上运行以下命令时:
echo '{"a": 1}' | prettyjson
终端将一直等待输入,直到按下CTRL + C并退出,并且没有预期的输出。
解决方法是将.cmd
到命令中,或仅使用cmd代替:
echo '{"a": 1}' | prettyjson.cmd
产出
a: 1
我对stackoverflow的问题: https :
对不起,我只是回顾了它在这里评论之前https://github.com/npm/cli/issues/470#issuecomment -568165144有关标准输入管道和PR在这里https://github.com/npm/cmd-shim / pull / 43 。 但是,仍然可以使用.cmd
来处理管道。
最有用的评论
删除npm bin目录中的所有
*.ps1
脚本吗?