dakora

dakora

I’m having some issues adding Tailwind into an existing project, and I’m hoping the community can help me. I’ve tried a few different methods for adding Tailwind into the project, but they end up with this error, and I can’t seem to find any information about it online:

% mix assets.setup
% mix assets.build

Rebuilding...

Done in 348ms.
✘ [ERROR] Could not resolve "tailwindcss/base"

    css/app.css:3:8:
      3 │ @import "tailwindcss/base";
        ╵         ~~~~~~~~~~~~~~~~~~

  You can mark the path "tailwindcss/base" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "tailwindcss/components"

    css/app.css:4:8:
      4 │ @import "tailwindcss/components";
        ╵         ~~~~~~~~~~~~~~~~~~~~~~~~

  You can mark the path "tailwindcss/components" as external to exclude it from the bundle, which will remove this error.

✘ [ERROR] Could not resolve "tailwindcss/utilities"

    css/app.css:5:8:
      5 │ @import "tailwindcss/utilities";
        ╵         ~~~~~~~~~~~~~~~~~~~~~~~

  You can mark the path "tailwindcss/utilities" as external to exclude it from the bundle, which will remove this error.

3 errors
** (Mix) `mix esbuild default` exited with 1

I’ve followed the official Tailwind guide on adding it to a Phoenix project, as well as poked around a new project generated with mix phx.new and can’t seem to nail it down. I’ve taken several steps:

app.css

@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";
  • added asets/tailwind.config.js (from a new Phoenix project

mix.exs

      "assets.setup": ["tailwind.install --if-missing", "esbuild.install --if-missing"],
      "assets.build": ["tailwind default", "esbuild default"],
      "assets.deploy": [
        "tailwind default --minify",
        "esbuild default --minify",
        "phx.digest",
        "cmd cp -r assets/static/* priv/static/"
       ]

config.exs

config :esbuild,
  version: "0.17.11",
  default: [
    args:
      ~w(js/app.js --bundle --target=es2017 --loader:.svg=file --loader:.woff=file --outdir=../priv/static/assets),
    cd: Path.expand("../assets", __DIR__),
    env: %{"NODE_PATH" => Path.expand("../deps", __DIR__)}
  ]

config :tailwind,
  version: "3.3.2",
  default: [
    args: ~w(
      --config=tailwind.config.js
      --input=css/app.css
      --output=../priv/static/assets/app.css
    ),
    cd: Path.expand("../assets", __DIR__)
  ]

dev.exs

watchers: [
    esbuild: {Esbuild, :install_and_run, [:default, ~w(--watch)]},
    tailwind: {Tailwind, :install_and_run, [:default, ~w(--watch)]}
  ]

mix.exs dep: {:tailwind, "~> 0.2.0", runtime: Mix.env() == :dev}

I’ve plodded around a newly generated app but nothing else seems to stand out other than the changes made above. Any help is highly appreciated!

Showing Posts 1 to 3

w0rd-driven

w0rd-driven

Does the new app work for you? If it doesn’t, it sounds like maybe esbuild, tailwind, or both are not downloading as part of mix assets.setup. If they’re downloaded, you should be able to run the commands normally, like tailwind default --minify. Maybe that’d point to a better error message if that is happening. The config file tailwind.config.js having a JS syntax error could produce something like this.

dakora

dakora OP

I didn’t even think to check, but assets.setup and assets.build do both work on a newly generated project, so I don’t believe it’s a platform issue.

I do see both the tailwind and esbuild executables in my _build directory, and esbuild has been in the project forever. For some reason esbuild doesn’t see tailwind. tailwind default works fine, but esbuild default throws an error as before.

I’ll sift through the new project again and see if i’m missing anything, but if I go verbatim off of the official Tailwind documentation, nothing has been left out. I’m thinking it is some assumption esbuild makes, as this project was first build long before even webpack was a thing in Phoenix, so it has survived several upgrades.

I also don’t believe it is the tailwind config, as it was copied directly from the newly generated project, and tailwind doesn’t throw any errors

dakora

dakora OP

Wow okay, so my app.js still had import css from "../css/app.css" at the top. Removing that fixed the issue :tada:

— All posts loaded —

Where Next? Top

Trending in Questions Top

Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
FlyingNoodle
If a change or preparation module uses Ash.Changeset.get_argument/2 or Ash.Query.get_argument/2 (or any of the other get_argument functio...
New
psy-q
I’m trying to set up Emacs with elixir-ls via lsp-mode and credo via Flycheck. This should mostly be preconfigured as Flycheck picks up c...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews