typescript - 如何在 Docker 卷上将 typescript 转换为 javascript?
问题描述
我有一个 Typescript 节点应用程序。主文件是server.ts
. 我想在 Docker 容器中运行这个应用程序。我有一个Dockerfile
运行 Typescript 转译的构建步骤,例如:
FROM node:9.9 as build
WORKDIR /app
COPY package*.json ./
COPY ... # copy the source files to the docker container
RUN npm install && \
npm run build # <-- runs Typescript transpile
FROM node:9.9
COPY --from=build /path/to/source/files /app
WORKDIR /path/to/server.js directory
CMD ["node", "server.js"]
我docker-compose
用来配置容器进行开发
my-app:
build:
context: /path/to/build/context
dockerfile: Dockerfile
command: bash -c "npm install -g nodemon && nodemon server.js"
network_mode: "host"
volumes:
- /path/to/server.js/directory/local:/path/to/server.js/directory/in/container
由于 Typescript 在图像构建阶段被转译,因此server.js
文件是在容器中创建的。因此,如果我在docker-compose
没有包含卷的情况下运行,则server.js
文件在那里并且容器可以正常启动。如果我docker-compose
使用卷运行,则server.js
文件不存在,只是server.ts
. 我认为这是因为在本地,我没有,server.js
因为它是在映像构建阶段构建的,并且由于卷正在引用该目录,所以它不在容器中。有什么方法可以构建容器并将js
构建阶段的转译文件放在该卷中?
解决方案
一个想法是在构建映像期间将已转换的文件复制到不同的文件夹中,并/path/to/server.js/directory/in/container
在开始之前将它们链接到目录node
。docker-compose 中的内容command
类似于:
command: bash -c "ln -s /path/to/built/files /path/to/server.js/directory/in/container; npm install ..."
推荐阅读
- android - 哪种类型的连接允许服务器将数据发送到客户端而无需客户端先询问?
- r - 如何按组进行配对t检验并保存结果?
- javascript - 如何从 WebAssembly 模块中检测浏览器信息?
- google-cloud-platform - 更改 BigQuery 中记录列的类型
- javascript - 用户断开连接后如何重新连接到聊天应用程序(socket js)
- jquery - 如何在 jQuery 的 .each 循环中添加字符串
- r - 在 R 中将表(2 维)转换为向量(1 维)
- go - go中的dialogflow webhook
- python - 两个字典列表的数据操作
- swift - 程序化导航控制器不可见?