postcss / postcss-cli

CLI for postcss
Other
836 stars 93 forks source link

Watch fails silently in docker node:lts #370

Closed dievardump closed 3 years ago

dievardump commented 3 years ago

I have a problem with postcss-cli which doesn't work in watch mode in a node docker image

Here is a minimal repo that reproduce the problem: https://github.com/dievardump/postcss-watch-docker

Problem

When launching docker with the command npm run dev (which is :set to "postcss ./src/app.pcss -o ./public/global.css --watch") nothing happens. If launching with npm run buildor launching both of those commands outside of the docker, then everything works fine cd

Expected behavior

The file src/app.pcss should be bundled into public/global.css and any change to src/app.pcss should automatically re bundle the app.

RyanZim commented 3 years ago

Unfortunately, I do not know enough about docker to really help you debug this. --watch never exits until it's manually killed; is the dev command exiting in docker?

dievardump commented 3 years ago

Unfortunately, I do not know enough about docker to really help you debug this. --watch never exits until it's manually killed; is the dev command exiting in docker?

Not it's not exiting. It stays open, but never writes the bundle in the output file.

It is as if it's not doing anything, however the same command without --watch works perfectly.

I just created a repo with the minimal reproducible code, but it's usually in the middle of a stack with Svelte and other watch, but only postcss --watch fails without saying anything.

thought it my be some permissions problem in docker, but even a 777 on the whole project directory does not solve anything.

I guess I could use some other package to watch all .pcss files and recompile on change, but I have always been a postcss lover so if I could make the --watch works, that would be better.

I'm going to see if I can dive in the code and maybe get some console to find where it doesn't get things

danoc commented 3 years ago

I'm seeing this as well. In my case, the postcss ... -w --verbose command immediately exits with status code 0 (and no output) if used as within scripts in the package.json file. Removing -w causes it to compile and print an output.

Oddly I'm able to get the file watching to work though if I do:

docker-compose exec frontend yarn run dev:tailwind

It just isn't working if it's part of the Yarn script that runs when I do docker-compose up frontend.

@dievardump, do you find a fix? I'm going to try watch as a workaround: https://www.npmjs.com/package/watch

brianliddell commented 3 years ago

I'm having the same problem when running NPM PostCSS tasks in Panic's new Nova editor:

Panic's developers have suggested to me that:

I don't have the skills to comment on this diagnosis!

But I'd be grateful for any updates, or suggestions to help resolve this weird issue.

Thanks!

RyanZim commented 3 years ago

@dievardump any updates?

RyanZim commented 3 years ago

@dievardump any updates?

dievardump commented 3 years ago

@dievardump any updates?

Sorry. I think docker, in some versions, does not implement the "emitting of events when files are modified" that watch uses, which blocks postcss from working there.

that's, if I recall correctly, the conclusion I got from looking around everywhere.

I might be wrong since it was now a few months ago and I just decided to stop using docker for watches

MarcoGlauser commented 3 years ago

I noticed the same issue as @danoc and dug a bit further. By default, docker doesn't open a tty when running a container. I think this line is causing the immediate exit when docker is started in non-interactive mode. (no stdin/stdout gets allocated) https://github.com/postcss/postcss-cli/blob/cd5d5df47fd988cbde7dfa7ad8063e3b111b2910/index.js#L55

There's a way around with docker by starting it with the -it flags that will allocate a tty and stdin/stdout. Or in docker compose setting tty: true

However, I think it should be possible to start the watch mode without stdin present, since the watch mode is not really interactive.

RyanZim commented 3 years ago

We have this line to allow ^D to exit watch mode, not sure if it's worth adding an option to disable it, given that there's a workaround in Docker.

brianliddell commented 3 years ago

Hi Ryan:

Thanks for your quick reply.

I should have mentioned that I’m limited in my coding skills. So unfortunately I don’t fully understand what you are saying in your email.

My aim is to get my existing watch script to run with a single click in Nova, either with a simple amendment to my watch script, or with a fix in Nova.

Are you suggesting adding an option to Nova's preferences that would disable a line of Nova’s code in order to fix the ‘watch script hanging’ problem?

Brian Liddell

On 24 Sep 2021, at 12:51, Ryan Zimmerman @.***> wrote:

We have this line to allow ^D to exit watch mode, not sure if it's worth adding an option to disable it, given that there's a workaround in Docker.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/postcss/postcss-cli/issues/370#issuecomment-926564880, or unsubscribe https://github.com/notifications/unsubscribe-auth/AD73FKDQWVUPLYBG67FJGQLUDRQ5VANCNFSM4WYOSCUQ. Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.