NPX 真的需要 NPM 预装 babel 组件到 运行 吗?

Does NPX really need NPM to preinstall babel components to run it?

为什么这不起作用?
npx -p @babel/core -p @babel/cli -p @babel/preset-env babel --presets=@babel/preset-env src -d deploy

这确实有效,但我认为 NPX 不需要预安装:
npm i @babel/core @babel/cli @babel/preset-env && npx babel --presets=@babel/preset-env src -d deploy

根据大多数描述,它似乎 should 从 NPM 注册表中检索它在本地找不到的任何内容,然后在 运行ning 之前安装它,或者甚至可以 运行 无需安装。

对于我当前的项目,它被包含在 Heroku 应用程序构建脚本中,其中报告的错误如下:

remote: npx: installed 302 in 16.391s
remote: { Error: Cannot find module '@babel/preset-env' from '/tmp/build_d9c5cb59d8e4131a23bd0ce2437051f9'
remote: at Function.module.exports [as sync] (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/node_modules/resolve/lib/sync.js:74:15)
remote: at resolveStandardizedName (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/files/plugins.js:101:31)
remote: at resolvePreset (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/files/plugins.js:58:10)
remote: at loadPreset (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/files/plugins.js:77:20)
remote: at createDescriptor (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/config-descriptors.js:154:9)
remote: at items.map (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/config-descriptors.js:109:50)
remote: at Array.map ()
remote: at createDescriptors (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/config-descriptors.js:109:29)
remote: at createPresetDescriptors (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/config-descriptors.js:101:10)
remote: at passPerPreset (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/config-descriptors.js:58:96) code: 'MODULE_NOT_FOUND' }
remote: npm ERR! code ELIFECYCLE
remote: npm ERR! errno 1


我认为 试图解释这个问题,但我真的不明白,而且似乎还有更多的事情要做,因为我什至无法让它与我的任何包一起工作由 NPM 预装。

BabelJS 的工作人员 Jordan Harband 和 Huáng Jùnliàng 帮助我理解了为什么我想做的事情在这个时候是不可能的,有两个原因:

1) Babel loses it's scope

2) Babel searches npx's current working directory instead of it's own