typescript - XSym: هنگام اجرای باینری در داکر روی ویندوز پیدا نشد
من در حال استفاده از داکر روی ویندوز هستم.
خطا :
Step 4/5 : RUN npm install -g
---> Running in ec6582e10f69
+ [email
added 1 package in 0.437s
Removing intermediate container ec6582e10f69
---> f2b9a25a51a3
Step 5/5 : RUN npm run build-tsc
---> Running in 6321ac31e370
> [email build-tsc /app
> tsc
/app/node_modules/.bin/tsc: line 1: XSym: not found
/app/node_modules/.bin/tsc: line 2: 0021: not found
/app/node_modules/.bin/tsc: line 3: 8cbd85238d8fbeb66a0afc1d79bcd880: not found
/app/node_modules/.bin/tsc: line 4: ../typescript/bin/tsc: not found
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! [email build-tsc: `tsc`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the [email build-tsc script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2019-02-17T09_27_42_522Z-debug.log
ERROR: Service 'auth' failed to build: The command '/bin/sh -c npm run build-tsc' returned a non-zero code: 1
فایل داکر:
FROM node:8.15.0-alpine
ADD . /app/
WORKDIR /app
RUN npm install -g
RUN npm run build-tsc
package.json:
"scripts": {
...
"build-tsc": "tsc",
...
},
"dependencies": {
...
"typescript": "^3.3.3"
}
اگر سعی کنم همان فرمان را داخل ترمینال در کانتینر داکر اجرا کنم، بهخوبی کار میکند. با استفاده از docker-compose اگر آن را در فیلد command قرار دهم، باز هم بهخوبی کار میکند.
پاسخ شماره ۱
من این مشکل را با react-scripts build مشاهده میکنم وقتی که پوشه node_modules/ ویندوز من داخل کانتینر لینوکس متصل باشد. به احتمال زیاد، شما npm install را در ویندوز اجرا کردهاید و سپس node_modules/ را هنگام ساخت به ایمیج خود کپی کردهاید، یا پوشه پروژه محلی خود را بهعنوان یک حجم Docker متصل کردهاید. به هر صورت، شما در حال تلاش برای اجرای یک فایل اجرایی ویندوز روی لینوکس هستید و این باعث اختلال میشود.
از نظر فنی این اتفاق میافتد زیرا محتوای فایل باینری /app/node_modules/.bin/tsc شبیه به
XSym
0021
8cbd85238d8fbeb66a0afc1d79bcd880
../typescript/bin/tsc
شما باید بتوانید با اضافه کردن node_modules/ به فایل .dockerignore خود، مشکل زمان ساخت را دور بزنید.
اگر مانند من، بعداً دایرکتوری پروژه محلی را برای اهداف توسعه داخل کانتینر سوار کنید، هنوز هم باید پوشه node_modules/ را به صورت دستی حذف کرده و دوباره از داخل کانتینر npm install را اجرا کنید.
