为何在Alpine Linux中执行npm run命令失败?
问题描述
我尝试执行package.json中定义的npm run test和npm run server命令,但两个命令均执行失败,报错显示npm无法识别语法。以下是相关信息:
package.json的scripts配置
"scripts": { "server": "app/server.js", "build": "npm run test && npm run build server", "test": "test/default.js" },
说明:app/server.js是tsc编译TypeScript生成的文件,编译无警告;test/default.js是纯手写JavaScript文件。
执行npm run server的报错
npm run server > my-project@1.0.0 server > app/server.js app/server.js: line 1: use strict: not found app/server.js: line 2: exports.__esModule: not found app/server.js: line 3: syntax error: unexpected "("
执行npm run test的报错
npm run test > my-project@1.0.0 test > test/default.js test/default.js: line 1: syntax error: unexpected "("
相关代码片段
test/default.js前7行
const request = require('supertest'); const chai = require('chai'); const app = require('./server'); const expect = chai.expect; describe('GET /vehicles/:id', () => {
app/server.js前10行
"use strict"; exports.__esModule = true; var express_1 = require("express"); var body_parser_1 = require("body-parser"); var pg_1 = require("pg"); // Create a new Express app var app = (0, express_1["default"])(); // Parse JSON bodies app.use(body_parser_1["default"].json())
环境信息
- npm 9.2.0,Node.js 18.12.1
- tsconfig.json设置为使用es2020
- npm配置:
globalignorefile = "/etc/npmignore" prefix = "/usr/local" python = "/usr/bin/python3" ignore-scripts = false script-shell = "/bin/zsh" - 已执行
npm install,代码检查工具无问题 - 在Docker、Manjaro等多个环境下问题复现
- 此前使用Deno,对Node.js运行JS的方式不太熟悉
解决方案
问题出在npm脚本的写法上:你直接指定了.js文件路径,没有调用Node.js解释器来执行它。因为你的npm配置中script-shell是/bin/zsh,zsh会尝试把JS文件当作shell脚本来解析,这自然会触发语法错误。
修改package.json的scripts配置,在每个.js文件前加上node命令即可:
"scripts": { "server": "node app/server.js", "build": "npm run test && npm run build server", "test": "node test/default.js" },
修改后重新执行npm run server和npm run test,问题即可解决。
内容的提问来源于stack exchange,提问作者olithad
相关产品推荐
相关产品推荐

