53

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
  • 2,883
  • 4
  • 30
  • 43

4 Answers4

67

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,138
  • 1
  • 20
  • 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
50

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,167
  • 1
  • 8
  • 21
9

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,059
  • 12
  • 16
-6

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,869
  • 3
  • 14
  • 25