簡體   English   中英

Docker +私有npm軟件包=找不到模塊/找不到模塊

[英]Docker + private npm package = module not found/cannot find module

我在gitlab存儲庫中有一個名為“ anvil”的私有軟件包(源代碼)。 我有一個項目,該程序包的使用者,稱為“ warden”,它將在Docker容器(具有Dockerfile)中啟動。

我已經以將安裝砧(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 .啟動容器sudo docker run . 一切正常,直到執行了砧(包)中的postinstall腳本。

Anvil的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腳本,該腳本在由warden安裝時執行。 構建docker文件時,這就是我得到的:

...
> 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 repo普通安裝它只是將源代碼放在node_modules下, node_modules不是實際的已編譯包中。 順便說一句,anvil是discord-anvil的縮寫,后者是官方的軟件包名稱。

但是,如果我在本地重復相同的過程(不是docker容器),一切都會順利進行,並且打字稿不會引發錯誤。

有任何想法嗎? 提前致謝。

原來這些錯誤是因為打字稿正在編譯整個項目,而不僅僅是我想要的砧,這可能是由於砧的package.json '屬性設置為僅包含'dist'文件夾以及何時將其拉出從gitlab,它實際上只會拉README,LICENSE和package.json, 別無其他

我認為打字稿編譯器如果找不到要編譯的文件或tsconfig.json文件,它將在父目錄 (即根目錄, tsconfig.json查找,從而tsconfig.json錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM