У меня есть личный пакет (исходный код) в моем репозитории gitlab, который называется 'anvil'. У меня есть проект, который является потребителем этого пакета, называется warden, и он будет запущен в Docker-контейнере (в нем есть Dockerfile.)
Я определил запись в зависимостях warden (для потребителя) так, чтобы она установила anvil (пакет в моем gitlab), это выглядит так:
"dependencies": {
"@types/knex": "^0.14.18",
"@types/node": "^10.9.4",
"discord-anvil": "git+https://gitlab+deploy-token-<deploy_token_here>@gitlab.com/<myusername>/anvil.git#dev-2.0",
"discord.js": "^11.4.2",
"knex": "^0.15.2",
"sqlite3": "^4.0.2",
"typescript": "^2.9.2"
}
Мой Dockerfile:
FROM node:10
WORKDIR /app
ADD . /app
RUN npm install
ENV token="<private_token_here>"
ENV prefix="."
RUN npm start
Проблема в в том, что как только я запускаю контейнер, используя sudo docker run .
, все идет хорошо, пока не будет выполнен скрипт postinstall
в наковальне (пакет).
Наковальня package.json
(некоторые несущественные вещи вывезены):
{
"name": "discord-anvil",
"version": "2.9.0",
"main": "./dist/index.js",
"scripts": {
"watch": "tsc --watch",
"build": "tsc",
"type-check": "tsc --noEmit",
"test": "npm run build && mocha dist/test/tests.js",
"postinstall": "npm run build"
},
"license": "MIT",
"dependencies": {
...
},
"devDependencies": {
...
"typescript": "^2.8.1"
},
"files": [
"dist"
]
}
Как видите, в anvil (пакете) есть сценарий postinstall
, который выполняется при установке надзирателем. Когда строится файл докера, вот что я получаю:
...
> discord-anvil@2.9.0 postinstall /app/node_modules/discord-anvil
> npm run build
> discord-anvil@2.9.0 build /app/node_modules/discord-anvil
> tsc
../../src/app.ts(14,8): error TS2307: Cannot find module 'discord-anvil'.
../../src/app.ts(15,39): error TS2307: Cannot find module 'discord-anvil/dist/commands/command'.
../../src/commands/ban.ts(3,68): error TS2307: Cannot find module 'discord-anvil'.
../../src/commands/ban.ts(4,37): error TS2307: Cannot find module 'discord-anvil/dist/commands/command'.
...
Та же ошибка повторяется в основном для каждого файла, в котором используется наковальня (требуется / импортируется). Я был вынужден использовать сценарий postinstall
для сборки проекта, поскольку простая установка его из репозитория git просто помещает исходный код в node_modules
, а не в фактически скомпилированный пакет . Кстати, наковальня - это просто сокращение от наковальни, которая является официальным названием пакета.
Однако, если я повторю ту же самую процедуру локально (не в контейнере Docker), все будет хорошо, и машинопись не выдаст ошибок.
Есть идеи? Заранее спасибо.