我想创建一个package.json构建脚本,当在Windows、Linux和Mac上运行时,它会执行一组稍微不同的命令.

问题是,我无法找到一种方法将其放入package.json个文件中,以便在每个系统上都能正常运行.

下面是我想举的一个例子:

"scripts" : {
    "build.windows" : "echo do windows specific stuff",
    "build.linux" : "echo do linux specific stuff",
    "build.mac" : "echo do mac specific stuff",
    "build" : "??????????????" <- what to put here to execute script designed for OS
                                  on which npm is running
}

推荐答案

您可以使用node run-script命令的脚本.npm run是一条捷径.

包json:

"scripts" : {
    "build-windows" : "node build-windows.js",
    "build-linux" : "node build-linux.js",
    "build-mac" : "node build-mac.js",
    "build" : "node build.js"
}

命令行:

npm run build-windows

如果不喜欢,可以在 node 内部使用命令.js.

包json:

"scripts" : {
    "build" : "node build.js"
}

建筑js

var sys = require('sys');
var exec = require('child_process').exec;
var os = require('os');

function puts(error, stdout, stderr) { sys.puts(stdout) }

// Run command depending on the OS
if (os.type() === 'Linux') 
   exec("node build-linux.js", puts); 
else if (os.type() === 'Darwin') 
   exec("node build-mac.js", puts); 
else if (os.type() === 'Windows_NT') 
   exec("node build-windows.js", puts);
else
   throw new Error("Unsupported OS found: " + os.type());

Node.js相关问答推荐

Node.js PNG缓冲区获取未知图像格式错误

设置默认 node 版本

TS 后端开发:prismagenerate找不到已安装的@tsed/prisma包

FHIR 服务器:尽管 JSON 格式正确,但在 POST 请求中接收未定义请求正文

Rest-Api动态图像路径和Express除非

SvelteKit应用程序立即退出,没有错误

动态设置元数据,无需重复请求 NextJS 13

如何在带有 JS 的 Nodejs 中使用没有 Async 方法的 Await

Cloudflare 522 错误 - javascript 客户端连接到 node 服务器

将环境变量从 GitHub 操作传递到 json

在 React 和 Socket.io 中使用 Effect 钩子重新渲染两次

为什么当我try req.logout() 时出现此错误?

tsc:当我上传 React+next js 和 node 项目时,在 heroku 找不到

try 运行迁移时的 Typeorm:缺少必需的参数:dataSource

socket.io 发出回调合适吗?

用一级 try ... catch 捕获 JavaScript Promise 中的错误

从 React(同构应用程序)进行 API 调用时出现Access-Control-Allow-Origin问题

卸载代码/模块

Node.js 中的 PHP exit()/die() 类似功能是什么

node/nodemon 中是否有对 typescript 的源映射支持?