你可以在 package.json 中为 npm 脚本设置别名吗?

Posted

技术标签:

【中文标题】你可以在 package.json 中为 npm 脚本设置别名吗?【英文标题】:Can you set aliases for npm scripts inside package.json? 【发布时间】:2019-03-09 16:57:39 【问题描述】:

我有一个项目写在Typescript

本地开发时:

ts-node 作为开发依赖安装,命令是

  to start: "ts-node src/index"
  to init: "ts-node bin/init"
  to init db: "ts-node bin/database-init"
  to migrate db: "ts-node bin/database-migrate"
  to add users: "ts-node bin/add-users"

部署时:

开发依赖项被删除,应用程序被转译,命令被

  to start: "node src/index"
  to init: "node bin/init"
  to init db: "node bin/database-init"
  to migrate db: "node bin/database-migrate"
  to add users: "node bin/add-users"

因此我不得不在我的package.json 中维护它,它会继续增长

"scripts": 
  "start": "ts-node src/index",
  "start:js": "node src/index",
  "init": "ts-node bin/init",
  "init:js": "node bin/init",
  "db:init": "ts-node bin/db-init",
  "db:init:js": "node bin/db-init",
  "db:migrate": "ts-node bin/db-migrate",
  "db:migrate:js": "node bin/db-migrate",
  "add:users": "ts-node bin/add-users",
  "add:users:js": "node bin/add-users"
,

我更希望有一个同时适用于两者的命令


为此,我在部署服务器中设置了以下别名

alias ts-node=/usr/bin/node

因此,所有这些现在都适用于两者..

 "scripts": 
  "start": "ts-node src/index",
  "init": "ts-node bin/init",
  "db:init": "ts-node bin/db-init",
  "db:migrate": "ts-node bin/db-migrate",
  "add:users": "ts-node bin/add-users",

但这不是一个很好的解决方案,并且阻止我将它部署到其他任何地方.. 我更喜欢将right-node 的名称空间设置为ts-node || nodepackage.json 内这样它就可以移植了..

我知道在运行 npm scripts 时会添加所有依赖项的命名空间,所以这确实发生在幕后,但是是否有任何内置功能可以手动执行此操作?

【问题讨论】:

【参考方案1】:

我认为最好的解决方案是使用 NODE_ENV,但首先,您需要安装:

npm install if-env --save

然后在脚本中:

"scripts": 
"start": "if-env NODE_ENV=production ?? npm run start:prod || npm run start:dev",
"start:dev": "ts-node src/index",
"start:prod": "node src/index"

在服务器上,您需要将 NODE_ENV 设置为生产

在 Linux 上:

export NODE_ENV=production

对于生产,我建议使用 pm2 或 foverer insted node 之类的东西来启动应用程序

【讨论】:

嘿抱歉,这不仅仅是一个命令,而是一堆。编辑问题以更准确地反映问题 您可以在所有任务中使用此 if 语句,但调用新脚本只需在 if 语句中直接使用命令即可。这样,您将拥有一个用于生产和开发环境的脚本

以上是关于你可以在 package.json 中为 npm 脚本设置别名吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 package.json 中为包提供自定义 url

如何在 package.json 中拥有来自不同注册表的 npm 依赖项?

npm notice 创建了一个锁文件作为 package-lock.json。你应该提交这个文件

npm 和package.json 文件

npm 如何通过 package.json 安装依赖最新版

npm install 如果 package.json 被修改