pm2在docker transpiler中运行不起作用

时间:2018-04-21 08:42:04

标签: node.js express docker pm2

感谢您抽出宝贵时间帮我解决这个问题。

  • 简介

我创建了一个docker,我还为pm2配置了一个配置文件。我希望能够在开发模式下启动docker并在内部使用pm2,能够通过开发工具等调试打字稿。

应用程序是使用nodejs,expressjs in typescript构建的。

  • 问题 在本地运行pm2 start server-debug.config.js一切正常。我可以通过Dev工具调试应用程序,我可以打开typescript文件并添加断点。

构建docker时,一切正常,只有一个例外。打开开发工具时,我只能看到js文件,无法调试打字稿。

所以基本上这个转换器在本地工作,但不能通过码头工作。

  • 配置

    1. Docker文件

```

# specify the node base image with your desired version node:<version>
FROM keymetrics/pm2:latest-alpine

# client backend
COPY . /home/api
WORKDIR /home/api

ARG API_TAG
ARG NODE_ENV
ARG CONTAINER_USER
ENV NODE_ENV $NODE_ENV

RUN npm install && npm install pm2 -g && pm2 install typescript

# Set user to node on production
USER $CONTAINER_USER

# start backend & frontend
ENTRYPOINT if [ "$NODE_ENV" = "development" ];\
then pm2-runtime /home/api/server-dev.config.js --env ${NODE_ENV} --no- 
daemon;\
else pm2-runtime /home/api/server.config.js --env ${NODE_ENV} --no-daemon;\
fi
  1. Pm2配置文件
  2. ```

    const _ = require('lodash');
    const serverConfig = require('./server.config');
    
    const devServerConfig = {apps: []};
    
    devServerConfig.apps[0] = _.merge(serverConfig.apps[0], {
        watch: true,
        port: 8000,
        source_map_support: true,
        script: "./dist/App.js",
        ignore_watch: ["data",
        "node_modules",
        "DockerFile",
        ".gitignore",
        "docker-compose*",
        "README.md",
        "server.config.js",
        "logs",
        "server-dev.config.js"],
        node_args: [ "--inspect=0.0.0.0:5858", "--harmony" ],
        error_file : "./logs/error.service-debug.log",
        out_file : "./logs/out.service-debug.log",
        pid_file : "./logs/debug.service.pid",
        log_date_format: "",
        watch_options: {
            "usePolling": true,
            "alwaysStat": true,
            "useFsEvents": false,
        },
    })
    
    // , "--require=ts-node/register", "--harmony"
    
    module.exports = devServerConfig;
    

    ```

    1. .env文件

      API_TAG = 1.0 NODE_ENV =发展 CONTAINER_USER =根 PORT = 8000 MONGO_PORT = 27017

    2. tsconfig

    3. ```

      {
          "compilerOptions": {
          "target": "es6",
          "module": "commonjs",
          "outDir": "dist",
          "sourceMap": true
          },
          "files": [
              "./node_modules/@types/mocha/index.d.ts",
              "./node_modules/@types/node/index.d.ts"
          ],
          "include": [
              "./src/**/*.ts"
          ],
          "exclude": [
          "node_modules"
          ]
       }
      

      ```

1 个答案:

答案 0 :(得分:0)

对于那些正在努力解决这个问题的人来说,经过几个小时的调试,反复试验,我找到了一个有效的解决方案。在tsconfig文件中添加内联源映射将解决问题。

我会接受我自己的答案作为帮助其他人解决这个问题的解决方案。