简体   繁体   English

Typescript Nodejs Dockerfile:错误 TS5057:在指定目录中找不到 tsconfig.json 文件:'.'

[英]Typescript Nodejs Dockerfile: error TS5057: Cannot find a tsconfig.json file at the specified directory: '.'

I'm trying to create a production build for a node typescript project using a Dockerfile.我正在尝试使用 Dockerfile 为节点 typescript 项目创建生产版本。

Though, at the step of converting the TS files into Javascript, I get the following error:虽然,在将 TS 文件转换为 Javascript 的步骤中,我收到以下错误:

error TS5057: Cannot find a tsconfig.json file at the specified directory: '.'.
error Command failed with exit code 1.

Can someone help me getting this right, please?有人可以帮我解决这个问题吗?

Below are the pieces of information about the main files used:以下是有关使用的主要文件的信息:

  • Dockerfile Dockerfile
FROM node:lts-stretch-slim

# Create app directory to hold the application code inside the image
WORKDIR /usr/src/app

# Install app dependencies
COPY package*.json yarn.lock ./

RUN yarn

RUN yarn build

COPY ./dist .

EXPOSE 3333

COPY entrypoint.sh /
ENTRYPOINT [ "/bin/bash", "/entrypoint.sh" ]
  • Error错误
[4/4] Building fresh packages...
Done in 13.99s.
Removing intermediate container 44a52bf048a4
 ---> 39b5fc8dc705
Step 5/9 : RUN yarn build
 ---> Running in 04bb0ea984e3
yarn run v1.22.4
$ tsc -p .
error TS5057: Cannot find a tsconfig.json file at the specified directory: '.'.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
ERROR: Service 'node-app' failed to build: The command '/bin/sh -c yarn build' returned a non-zero code: 1
  • Package.json Package.json
"scripts": {
    "dev": "ts-node-dev --transpileOnly --ignore-watch node_modules src/server.ts",
    "start": "node dist/src/server.js",
    "build": "tsc -p ."
  },
  • tsconfig.json tsconfig.json
{
  "compilerOptions": {
    /* Visit https://aka.ms/tsconfig.json to read more about this file */

    /* Basic Options */
    // "incremental": true,                   /* Enable incremental compilation */
    "target": "es6",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
    // "lib": [],                             /* Specify library files to be included in the compilation. */
    // "allowJs": true,                       /* Allow javascript files to be compiled. */
    // "checkJs": true,                       /* Report errors in .js files. */
    // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
    // "declaration": true,                   /* Generates corresponding '.d.ts' file. */
    // "declarationMap": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */
    // "sourceMap": true,                     /* Generates corresponding '.map' file. */
    // "outFile": "./",                       /* Concatenate and emit output to single file. */
    "outDir": "./dist",                        /* Redirect output structure to the directory. */
    "rootDir": "./",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
    // "composite": true,                     /* Enable project compilation */
    // "tsBuildInfoFile": "./",               /* Specify file to store incremental compilation information */
    // "removeComments": true,                /* Do not emit comments to output. */
    // "noEmit": true,                        /* Do not emit outputs. */
    // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */
    // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
    // "isolatedModules": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */

    /* Strict Type-Checking Options */
    "strict": true,                           /* Enable all strict type-checking options. */
    // "noImplicitAny": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */
    // "strictNullChecks": true,              /* Enable strict null checks. */
    // "strictFunctionTypes": true,           /* Enable strict checking of function types. */
    // "strictBindCallApply": true,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
    // "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */
    // "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */
    // "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */

    /* Additional Checks */
    // "noUnusedLocals": true,                /* Report errors on unused locals. */
    // "noUnusedParameters": true,            /* Report errors on unused parameters. */
    // "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */
    // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */

    /* Module Resolution Options */
    // "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
    // "baseUrl": "./",                       /* Base directory to resolve non-absolute module names. */
    // "paths": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
    // "rootDirs": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */
    // "typeRoots": [],                       /* List of folders to include type definitions from. */
    // "types": [],                           /* Type declaration files to be included in compilation. */
    // "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
    "esModuleInterop": true,                  /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
    // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */
    // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */

    /* Source Map Options */
    // "sourceRoot": "",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */
    // "mapRoot": "",                         /* Specify the location where debugger should locate map files instead of generated locations. */
    // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */
    // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */

    /* Experimental Options */
    // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */
    // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */

    /* Advanced Options */
    "skipLibCheck": true,                     /* Skip type checking of declaration files. */
    "forceConsistentCasingInFileNames": true  /* Disallow inconsistently-cased references to the same file. */
  }
}

PS: Both the Dockerfile and the tsconfig.json are at the root directory of the project (same level I mean). PS: Dockerfiletsconfig.json都在项目的根目录下(我的意思是同一级别)。 And I can successfully run the yarn build script locally (outside of the Dockerfile), which in turn generates the dist folder with only JS code.而且我可以在本地(在 Dockerfile 之外)成功运行yarn build脚本,从而生成仅包含 JS 代码的dist文件夹。

PS2: I followed this tutorial in order to build a similar Dockerfile for me. PS2:我按照本教程为我构建了一个类似的 Dockerfile。

You are not copying all the files to the container.您没有将所有文件复制到容器中。 You are only copying what is in the dist folder with COPY./dist.您仅使用COPY./dist.

My question to you is, is this for development or for production?我的问题是,这是用于开发还是用于生产? If its for development you can just copy the while root directory of the project with如果它用于开发,您可以复制项目的 while 根目录

COPY . .

Now if this is for a production build you definitely want an intermediate build step so you only have to copy the compiled JS code to the container and run that.现在,如果这是用于生产构建,您肯定需要一个中间构建步骤,因此您只需将编译后的 JS 代码复制到容器并运行它。

Thanks to the folks that have helped, I was able to adjust the Dockerfile accordingly to my needs here.感谢帮助过的人,我能够根据我的需要调整 Dockerfile。

I had to create an empty TS file next to my tsconfig.json file to get rid of the error mentioned at my comment above.我必须在我的tsconfig.json文件旁边创建一个空的 TS 文件,以消除我上面评论中提到的错误。 I also had to remove the dist in front of the path in the script section, otherwise I would get a module not found error.我还必须删除脚本部分中路径前面的dist ,否则我会收到module not found错误。

The Dockerfile ended up being like this for now: Dockerfile 最终变成了这样:

FROM node:lts-stretch-slim
# FROM node:10

# Create app directory to hold the application code inside the image
WORKDIR /usr/src/app

# Install app dependencies
COPY package*.json yarn.lock ./
COPY tsconfig.json ./
COPY .env ./

COPY emptyTs.ts ./

RUN yarn


RUN yarn build

COPY ./dist .
# COPY . .

EXPOSE 3333

COPY entrypoint.sh /
ENTRYPOINT [ "/bin/bash", "/entrypoint.sh" ]
  • package.json package.json
  "scripts": {
    "dev": "ts-node-dev --transpileOnly --ignore-watch node_modules src/server.ts",
    "start": "node src/server.js",
    "build": "tsc -p ."
  },

Updated answer (November 28th, 2020)更新答案(2020 年 11 月 28 日)

I ended up using a multi-stage build for this.我最终为此使用了多阶段构建。 Below you can find the Dockerfile script I wrote:您可以在下面找到我编写的 Dockerfile 脚本:

FROM node:lts-stretch-slim AS build
WORKDIR /usr/src/app
COPY package*.json yarn.lock ./
COPY tsconfig.json ./
COPY .env ./
RUN yarn
COPY . .
RUN yarn build


FROM node:lts-stretch-slim
WORKDIR /usr/src/app
COPY package*.json yarn.lock ./
COPY .env ./
RUN yarn
COPY --from=build /usr/src/app/dist ./
EXPOSE 3333
COPY entrypoint.sh /
ENTRYPOINT [ "/bin/bash", "/entrypoint.sh" ]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 打字稿错误在 tsconfig.json 中将模块更改为“umd”或“amd”时找不到模块“typescript-Collections” - Typescript error Cannot find module 'typescript-Collections' when changing the module to “umd” or “amd” in tsconfig.json 解析错误:无法读取文件'.../tsconfig.json'.eslint - Parsing error: Cannot read file '.../tsconfig.json'.eslint Typescript / Eslint 在我开始的每个项目中都会抛出“无法读取文件 tsconfig.json” - Typescript / Eslint throws "Cannot read file tsconfig.json" in every project I start lerna monorepo 中的 tsconfig.json 继承出现 TS18003 错误 - TS18003 error with tsconfig.json inheritance in lerna monorepo TypeScript编译器忽略tsconfig.json中的声明文件 - TypeScript compiler ignores declaration file in tsconfig.json 找不到模块,因为 tsconfig.json 中提到了路径 - cannot find module since the path is mentioned in the tsconfig.json “找不到模块 'react'”和“找不到 tsconfig.json” - “Cannot find module 'react'” and “tsconfig.json not found” 在tsconfig.json修复中定位ES6找不到名称 - Targeting ES6 in tsconfig.json fixes cannot find name 如何在 tsconfig.json 设置之外编译根 level.ts 文件? - How to compile a root level .ts file outside of the tsconfig.json settings? tsc忽略了​​我的tsconfig.json文件 - tsc ignores my tsconfig.json file
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM