Closed2
【Docker】package.jsonなしでjsファイルをコマンド実行したい

グローバルインストールしているのに認識されずにエラーになる。
ディレクトリ
project-root/
├── js-schema/
│ ├── Dockerfile
│ └── main.js
└── docker-compose.yml
Dockerfile
FROM node:lts-alpine
RUN mkdir /app
WORKDIR /app
RUN npm install -g @apidevtools/swagger-parser json-schema-merge-allof
COPY ./main.js /app
CMD ["node", "main.js"]
main.js
const SwaggerParser = require('@apidevtools/swagger-parser');
const mergeAllOf = require('json-schema-merge-allof');
// 以下、省略
エラー内容
❯ docker run sha256:XXXXX
node:internal/modules/cjs/loader:1228
throw err;
^
Error: Cannot find module '@apidevtools/swagger-parser'
Require stack:
- /app/main.js
at Module._resolveFilename (node:internal/modules/cjs/loader:1225:15)
at Module._load (node:internal/modules/cjs/loader:1051:27)
at Module.require (node:internal/modules/cjs/loader:1311:19)
at require (node:internal/modules/helpers:179:18)
at Object.<anonymous> (/app/main.js:32:23)
at Module._compile (node:internal/modules/cjs/loader:1469:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1548:10)
at Module.load (node:internal/modules/cjs/loader:1288:32)
at Module._load (node:internal/modules/cjs/loader:1104:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:174:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [ '/app/main.js' ]
}
Node.js v20.17.0

解決方法
NODE_PATHを設定してパスを通す。
Dockerfile
FROM node:lts-alpine
RUN mkdir /app
WORKDIR /app
RUN npm install -g @apidevtools/swagger-parser json-schema-merge-allof
COPY ./main.js /app
COPY ./index.yml /app
# この設定を追加
ENV NODE_PATH=/usr/local/lib/node_modules
CMD ["node", "main.js"]
このスクラップは2024/09/05にクローズされました