我用节点设置了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:它在我的本地机器上运行良好
答案 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
的更多信息