57

I'm trying to include some CSS in my create-react-app project. The CSS is from a 3rd party NPM package and therefore its in the node_modules directory.

I tried: import '/node_modules/packagename/css/styles.css';

But I get the error:

Module not found: You attempted to import /node_modules/packagename/css/styles.css which falls outside of the project src/ directory. Relative imports outside of src/ are not supported. You can either move it inside src/, or add a symlink to it from project's node_modules/.

I would prefer to not move the CSS to src/ so it can be updated via NPM. I could symlink but as I develop on windows and deploy to linux this isn't ideal.

What's the best way from me to include the CSS?

Sean Bannister
  • 3,105
  • 4
  • 31
  • 43

4 Answers4

69

Find the path of the css file

example: ./node_modules/packagename/dist/css/styles.css

Import using the path related to node_modules (anything after node_modules/ )

import 'packagename/dist/css/styles.css'
Afzal Hossain
  • 3,258
  • 1
  • 21
  • 13
  • 3
    you should definitely not be using relative paths to anything in the `node_modules` folder. node_modules css in create-react-app can be imported the same way as any js package in the node modules folder – Sampson Crowley Jul 23 '18 at 18:42
  • 1
    Correct! If the css loader is defined properly, it should load the css from the package without the relative path. – Afzal Hossain Jul 24 '18 at 05:07
  • 4
    @AfzalHossain Perhaps you should update your answer accordingly? – aweibell Sep 26 '18 at 14:28
51

relative paths are unnecessary from node_modules and should not be the recommended way to include the css

all you have to do is leave off the preceding slash and node_modules directory same as importing a js package from node modules:

import 'package/css/style-to-import.css'

when using (s)css imports, use the tilde (~) to indicate an absolute import:

@import '~package/css/style-to-import.css'

Sampson Crowley
  • 1,244
  • 1
  • 9
  • 22
11

A distinction not made from the previous answers is it depends on where you're importing the CSS into; a component or into a stylesheet.

If you're importing a node_modules stylesheet into a component, you don't need a relative path like mentioned above.

import 'packagename/dist/css/styles.css'

However, if you're importing a node_modules stylesheet into a CSS/SCSS file, you need to use tilde ~.

@import '~packagename/dist/css/styles.css'
png
  • 1,130
  • 14
  • 18
-7

I found this a bug of a pain. specially my webpack.config.js is not running anymore.

specially react app is now running in src folder and the import files need to be in the public folder.

i was using materialize-social and found out the easiest way is to move node_module file folder "materialize-social" to the public directory any other way please commend it down.

zero8
  • 1,997
  • 3
  • 15
  • 25