【问题标题】:Docker with lerna (Next.js and Graphql)带有 lerna 的 Docker(Next.js 和 Graphql)
【发布时间】:2021-09-18 14:39:21
【问题描述】:

所以我使用的是 lerna,并且在本地一切正常,但是当我尝试构建映像并通过 docker 运行它时,它似乎无法正常工作

FROM node:16-alpine3.11
ENV NODE_ENV=production

COPY . /app
WORKDIR /app
RUN npm i -g lerna
RUN lerna bootstrap
CMD npm run dev:all

这是 Dockerfile,这是 dockerignore 文件

node_modules
packages/api/node_modules
packages/web/node_modules
packages/web/.next

这是我拥有的项目结构(使用带有 lerna 的 npm 工作区 [所以我可以并行运行东西])

当我尝试运行图像/旋转容器时(抱歉,如果条款不正确,我对 Docker 还很陌生,第一次使用它)这是我得到的输出

 docker run locus

> dev:all
> lerna run --parallel dev

lerna notice cli v4.0.0
lerna info Executing command in 2 packages: "npm run dev"
api: > api@1.0.0 dev
api: > ts-node-dev --respawn -r tsconfig-paths/register src/index.ts
web: > web@1.0.0 dev
web: > next dev
web: ready - started server on 0.0.0.0:3000, url: http://localhost:3000
web: info  - Using webpack 5. Reason: Enabled by default https://nextjs.org/docs/messages/webpack5
api: [INFO] 17:31:43 ts-node-dev ver. 1.1.8 (using ts-node ver. 9.1.1, typescript ver. 4.3.5)
api: Error: Cannot find module 'tsconfig-paths/register'
api: Require stack:
api: - internal/preload
api:     at Function.Module._resolveFilename (node:internal/modules/cjs/loader:927:15)
api:     at Function.Module._load (node:internal/modules/cjs/loader:772:27)
api:     at Module.require (node:internal/modules/cjs/loader:999:19)
api:     at Module._preloadModules (node:internal/modules/cjs/loader:1247:12)
api:     at loadPreloadModules (node:internal/bootstrap/pre_execution:468:5)
api:     at prepareMainThreadExecution (node:internal/bootstrap/pre_execution:75:3)
api:     at node:internal/main/run_main_module:7:1
web: It looks like you're trying to use TypeScript but do not have the required package(s) installed.
web: Please install typescript by running:
web:    npm install --save-dev typescript
web: If you are not trying to use TypeScript, please remove the tsconfig.json file from your package root (and any TypeScript files in your pages directory).
lerna ERR! npm run dev exited 1 in 'web'
lerna ERR! npm run dev stdout:

> web@1.0.0 dev
> next dev

ready - started server on 0.0.0.0:3000, url: http://localhost:3000
info  - Using webpack 5. Reason: Enabled by default https://nextjs.org/docs/messages/webpack5
lerna ERR! npm run dev stderr:
It looks like you're trying to use TypeScript but do not have the required package(s) installed.

Please install typescript by running:

        npm install --save-dev typescript

If you are not trying to use TypeScript, please remove the tsconfig.json file from your package root (and any TypeScript files in your pages directory).

lerna ERR! npm run dev exited 1 in 'web'
lerna WARN complete Waiting for 1 child process to exit. CTRL-C to exit immediately.

我不确定这是我构建项目的方式还是其他方式(当我执行 npm install 时也会发生错误,而且我已经将 typescript 和 tsconfig-paths 作为开发部门)

【问题讨论】:

  • 您是否尝试在您的RUN lerna bootstrap 之前添加RUN npm install
  • 不,我没有只是将lerna bootstrap 替换为npm install lemme try :D

标签: node.js typescript docker npm next.js


【解决方案1】:

只需将 ENV NODE_ENV=production 放在引导之后,因为生产环境会导致 npm 跳过所有开发依赖项,这可能是构建应用程序所必需的。

最好的做法是使用单独的 sage,一个用于使用 dev-deps 构建,一个用于没有 dev-dependencies 的成品容器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2021-08-30
    • 2019-11-29
    相关资源
    最近更新 更多