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

Posted

技术标签:

【中文标题】NPX 真的需要 NPM 预装 babel 组件才能运行吗?【英文标题】:Does NPX really need NPM to preinstall babel components to run it? 【发布时间】:2020-01-11 17:17:36 【问题描述】:

为什么这不起作用?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 注册表中检索它在本地找不到的任何内容,然后在运行之前安装它,或者甚至无需安装即可运行它。

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

远程:npx:在 16.391 秒内安装了 302 远程: 错误:无法从“/tmp/build_d9c5cb59d8e4131a23bd0ce2437051f9”中找到模块“@babel/preset-env” 远程:在 Function.module.exports [as sync] (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/node_modules/resolve/lib/sync.js:74:15) 远程:在 resolveStandardizedName (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/files/plugins.js:101:31) 远程:在 resolvePreset (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/files/plugins.js:58:10) 远程:在 loadPreset (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/files/plugins.js:77:20) 远程:在 createDescriptor (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/config-descriptors.js:154:9) 远程:在 items.map (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/config-descriptors.js:109:50) 远程:在 Array.map() 远程:在 createDescriptors (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/config-descriptors.js:109:29) 远程:在 createPresetDescriptors (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/config-descriptors.js:101:10) 远程:在 passPerPreset (/tmp/npmcache.qz5Sl/_npx/595/lib/node_modules/@babel/core/lib/config/config-descriptors.js:58:96) 代码:'MODULE_NOT_FOUND' 远程:npm 错误!代码生命周期 远程:npm 错误!错误号 1

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于NPX 真的需要 NPM 预装 babel 组件才能运行吗?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 npx create-react-app 创建新的反应应用程序

译npx简介:一种npm包的执行器

npx:一个npm包执行器

打包一个react组件并发布到npm上

markdown npx避免全局npm

我自己的包中的npm包babel错误