如何在命令行直接运行Node/Babel脚本?

20

我的 package.json 文件长这样:

{
  "name": "99-nodetest",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "babel-node --presets env app.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "babel-cli": "^6.26.0",
    "babel-preset-env": "latest"
  }
}
我想要运行的js脚本是app.js。我不能直接使用node app.js来运行它,因为app.js包含新语法。因此,我必须通过babel运行它,使用npm start,按照上面定义的启动脚本。这里没有任何问题。我的问题是如何在命令行中直接运行cmd,能否做到类似于: npm run babel-node --presets env app.js

只是为了提供信息(并提供链接):上述问题与我的问题有关。 - Frank N
7个回答

28

你可以使用 npx 执行 npm 包的可执行文件。

Babel 7 总是将插件和预设相对于本地项目文件夹解析,因此您需要在项目中本地安装 @babel/preset-env

npm i -D @babel/preset-env

接下来可以使用npx运行babel-node,无需将其安装到项目中:

npx -p @babel/core -p @babel/node babel-node --presets @babel/preset-env app.js
如果您在项目中安装了@babel/node,则npx将优先使用项目本地版本。
对于Babel 6,可以使用下面的命令:
npx babel-node --presets env app.js

1
2019年:npx babel-node --presets @babel/preset-env app.js - Arne Jenssen
@ArneJenssen 谢谢。我更新了我的答案。使用Babel 7实际上比使用Babel 6更困难,不幸的是。 - Viktor Vlasenko

23

使用babel-cli中的babel-node.js,应用程序app.js将使用环境预设(preset)env 进行转译


node ./node_modules/babel-cli/bin/babel-node.js --presets env app.js . 注意:实际上是在babel-cli下。如果您更改了答案,我会接受它。 - joedotnot
我最终选择留在Babel 6,而不是升级到Babel 7,只是为了避免处理这个回归问题。 - Ben S
对于2020年及以后阅读此内容的任何人,使用Babel v7的情况发生了很大变化!您可能需要寻找其他答案,而不是这个适用于Babel 6的已接受答案! - joedotnot

14

哇塞!这比应该做的要难得多。

查看文档。简单来说;

Babel > 版本7.0必须在您的package.json中,才能从命令行运行。

npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/node 

npx babel-node --presets @babel/preset-env imports/test.js 

太好了,谢谢!“默认情况下,npx将检查<command>是否存在于$PATH中或本地项目二进制文件中,并执行该命令。” npmjs.com/package/npx - ptim

8

全局安装@babe/node -

npm i -g @babel/node

然后,babel-node命令就可以在您的终端中使用了。因此,您可以运行-

babel-node --presets env app.js

顺便说一下,它只应在开发环境中使用,强烈不建议用于生产环境,因为它过于沉重且占用内存较高。


如果您只想运行快速测试而不更改项目,则最佳解决方案。 - Iman Mohamadi

2
在Babel 7中,您可以运行以下命令:npx babel app.js

npx会将所有必需的node_modules缓存起来吗?(这样做比本地源代码的即时转译+执行要多得多?因为我宁愿限制自己只使用后者)。或者当给定一个本地文件(app.js)作为参数时,情况是否不同? - Frank N

2
最初的回答:
Babel节点有一个注册的“bin”,因此在安装过程中会在“node_modules/.bin”目录下生成一个可执行文件。
您可以通过简单地输入以下命令来运行它。
node_modules/.bin/babel-node --presets env app.js

这与较长的“node”或备用的“npx”版本完成相同的任务。翻译后为:

这与使用较长的“node”命令或备用的“npx”命令实现相同的功能。


-1
你可以通过告诉 node 关于 babel-node 来运行 app.js 文件: node ./node_modules/.bin/babel-node app.js 在根项目下有以下的 .babelrc 文件: {"presets": ["@babel/preset-env"]}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接