巴克尔在码头上观看

时间:2017-12-24 08:57:57

标签: node.js docker babeljs

我用节点设置了docker实例。 我想在这个实例上开发并使用babel来“编译”我的节点代码。 我用@ docker / cli用watch标志编译,我使用带有-L标志的nodemon。 出于某种原因,nodemon正在观看文件更改,但不是babel。 任何想法?

这是我的docker-compose.yml

main-app:
build: ./mainApp
user: "root"
command: yarn run start:watch
environment:
    NODE_ENV: production
    PORT: 8080
volumes:
  - ./mainApp:/app
  - /app/node_modules
ports:
  - '8080:8080'

这是package.json:

"scripts": {
"build": "babel src --out-dir public",
"serve": "node public/server.js",

"build:watch": "babel --watch src -d public -s",
"serve:watch": "nodemon -L public/server.js",

"start:watch": "concurrently -k \"npm run build:watch\" \"npm run serve:watch\""
},
"dependencies": {
    "express": "^4.16.1"
  },
"devDependencies": {
    "@babel/cli": "^7.0.0-beta.35",
    "@babel/core": "^7.0.0-beta.35",
    "@babel/preset-env": "^7.0.0-beta.35"
  },

你可以看到我同时使用它们来运行它们。 可能是什么问题巴贝尔没有看我的文件?

PS:它在我的本地机器上运行良好

3 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,最后使用了'babel-watch'。 IT仍然要求我使用-L标志启用poling以使其在Docker中工作。我没有尝试过,但同样的方法可能适用于巴贝尔本身。

请查看babel-watc自述文件以获取更多详细信息。 https://github.com/kmagiera/babel-watch#troubleshooting

  

您的文件系统配置不会触发filewatch通知   (这可能发生在例如你正在运行的时候   在docker容器中并且镜像了文件系统)。在这种情况下   尝试使用-L选项运行babel-watch,这将启用轮询   文件更改。

答案 1 :(得分:0)

Babel-watch对我来说没有用。 当我通过babel cli编译代码并在另一个目录中输出时(将由第二个docker容器使用) 我最终使用了nodemon exec选项 在我的package.json中,专门为docker创建了新脚本:

"docker-build:watch": nodemon -L --watch src --exec 'npm run build:watch'

然后使用npm运行docker-build:watch而不是npm运行build:watch

答案 2 :(得分:0)

Babel CLI使用Chokidar来监视文件更改,以使其在Linux映像中起作用,您需要:

CHOKIDAR_USEPOLLING=true babel --watch

您可以了解有关此here

的更多信息