Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stylus bootstrap loaded but not compiled with Webpack #122

Open
oric01 opened this issue May 10, 2016 · 18 comments
Open

Stylus bootstrap loaded but not compiled with Webpack #122

oric01 opened this issue May 10, 2016 · 18 comments

Comments

@oric01
Copy link

oric01 commented May 10, 2016

Hi,

    "bootstrap-styl": "^5.0.5",
    "stylus": "^0.54.5",
    "stylus-loader": "^2.0.0",
    "webpack": "^1.9.5",

Im trying to use bootstrap-stylus in a Webpack context.
As far as I understand, bootstrap-stylus is a Stylus plugin so i used this config in order to parse bootstrap stylus files :

//webpack.config.js
module.exports = {
    ...
    module : {
        loaders: [
           { test: /\.styl$/, loader: 'style-loader!css-loader!stylus-loader' },
           { test: /\.css$/, loader: 'style!css' },
        ]
    }
    stylus: {
        use: [bootstrap()],
    },
}
//navbar.styl
@import 'bootstrap/buttons'

.navbar
    height 6.5rem
//navbar.html
<div class="navbar">
    <span class="btn btn-primary"></span>
</div>

When I run my serve and inspect, I see that btn is loaded but not compiled (and off course btn-primary is not generated)

I didnt found any other way to configure it with Webpack.

Any idea ?

@oric01 oric01 changed the title Stylus boostrap loaded but not compiled with Webpack Stylus bootstrap loaded but not compiled with Webpack May 10, 2016
@kane-c
Copy link
Collaborator

kane-c commented May 10, 2016

I haven't tried it with Webpack yet but try adding the Bootstrap directory to your Stylus path instead of using it as a plugin:

module.exports = {
    ...
    module : {
        loaders: [
           { test: /\.styl$/, loader: 'style-loader!css-loader!stylus-loader' },
           { test: /\.css$/, loader: 'style!css' },
        ]
    }
    stylus: {
        paths: ['node_modules/bootstrap-styl'],
    },
}

Then you can just import in your Stylus files as normal: @import 'bootstrap/buttons'

@oric01
Copy link
Author

oric01 commented May 11, 2016

Look like it doesnt care about paths option

ERROR` in ./~/css-loader!./~/stylus-loader!./client/app/common/navbar/navbar.styl
Module build failed: Error: c:\projet\NG6-starter-master\client\app\common\navbar\navbar.styl:2:9
   1| @import '../common'
   2| @import 'bootstrap/buttons'
--------------^
   3| 
   4| .navbar
   5|   height $navbarHeight

failed to locate @import file bootstrap/buttons.styl

Until now only the use resolve the bootstrap path correctly, but doesnt parse it.

I'm still in a heavy lurning step on Webpack, so I feel that it's about telling the loader to get Bootstrap files into the render step, but I dont know how...

@kane-c
Copy link
Collaborator

kane-c commented May 11, 2016

Looking at the docs for stylus-loader, this should do it:

{ test: /\.styl$/, loader: 'css-loader!stylus-loader?paths=node_modules/bootstrap-styl' }

@oric01
Copy link
Author

oric01 commented May 11, 2016

Yes I tried this, but it has the same effect than the use option.
I will ask stylus-loader some support and will let you know if I have some news about it.
Thx @kane-c for your current support !

@kane-c
Copy link
Collaborator

kane-c commented May 11, 2016

No worries. Good luck!

@priyankaselvamclara
Copy link

same problem,

ERROR in .//css-loader!.//stylus-loader!.
need help

@JounQin
Copy link

JounQin commented Dec 12, 2016

@kane-c Did your source map generate correctly?

webpack-contrib/stylus-loader#156

@thedanheller
Copy link

any luck on this?

@reduxdj
Copy link

reduxdj commented Jan 19, 2017

any luck on this +1?

@maxmx
Copy link
Owner

maxmx commented Jan 19, 2017

We'll accept a PR if someone wants to take this on and it requires a fix in the bootstrap-stylus repo.

The new company I work for is using another framework so I haven't been able to test this against modern build tools.

@thedanheller
Copy link

thedanheller commented Jan 19, 2017

I managed to make it work with a small workaround:

https://github.com/daniloprates/thin-starter

main.styl

$icon-font-path = "~bootstrap-styl/fonts/"
@import 'bootstrap';

webpack.config.js

var bootstrap = require('bootstrap-styl');

module.exports = {
  entry: {
    a: './src/scripts/main.js',
    b: './src/style/main.styl'
  },
(...)
  stylus: { use: [bootstrap()] },
(...)
};

loaders

    {
        test: /\.(eot|svg|ttf|woff|woff2)$/,
        loader: 'file?name=node_modules/bootstrap-styl/fonts/[name].[ext]'
    }

@kane-c
Copy link
Collaborator

kane-c commented Jan 20, 2017

I put together my webpack sample and configured it for source maps.

They nearly worked, but I ran into this bug with stylus-loader where the browser knows the Stylus file and line but trying to view it just shows a file with null as the contents.

Has anyone been able to get source maps working properly?

@aneurysmjs
Copy link

@kane-c adding the query parameter as you suggested worked for me, hope to anyone works to, here's my webpack.config.js

module: {
    // rules for modules (configure loaders, parser options, etc.)
    rules: [
      {
        test: /\.html$/,
        exclude: [/node_modules/],
        use: [
          {
            loader: 'html-loader',
            options: {
              minimize: true
            }
          }
        ]
      },
      {
        test: /\.js?$/,
        exclude: [/node_modules/],
        use: ['ng-annotate-loader', 'babel-loader']
      },
      {
        test: /\.css$/,
        exclude: [/node_modules/],
        use: ['style-loader', 'css-loader']
      },
      {
        test: /\.styl$/,
        exclude: [/node_modules/],
        use: [
          'style-loader',
          'css-loader',
          'stylus-loader?paths=node_modules/bootstrap-styl'
        ]
      },
      {
        test: /\.(svg|woff|woff2|ttf|eot|ico)$/,
        exclude: [/node_modules/],
        use: [
          {
            loader: 'file-loader?name=src/assets/css/fonts/[name].[hash].[ext]'
          }
        ]
      },
      {
        test: /\.(png|jpe?g|gif)$/,
        exclude: [/node_modules/],
        use: [
          {
            loader: 'file-loader?name=src/assets/img/[name].[ext]'
          }
        ]
      }
    ]
  }

@lightbringer1991
Copy link

I have submitted a PR for this, tested and working on my webpack configuration.

@jpcmf
Copy link

jpcmf commented Jan 8, 2018

Can you share the solution @lightbringer1991 ?

@lightbringer1991
Copy link

@jpcmf it's in the linked PR to this issue #132

@yoyoys
Copy link

yoyoys commented Jan 26, 2018

When will #132, #133 be merged? nice done.

@crs1138
Copy link

crs1138 commented Jan 13, 2019

Is there a solution that works with Webpack 4?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests