Skip to content

Jade support in webpack releases #1886

Closed

Description

@ShadowManu

Sorry for not providing template information but I only have my phone available (and there's no critical info either).

Is there some in-the-works support for jade? The related issues/PR 's were closed but no real solution was provided. What can be done to have support for this?

Activity

  1. ShadowManu commented on Sep 9, 2016

    @ShadowManu
    Author

    So you guys closed #996 and #968 in favor of #40, then closed #40 with no specific ending, then closed the efforts in #1433 and #626 because you changed to webpack and here we are with no answers.

    Sorry, I'm not trying to be annoying, specially when I see a lot of hate on recent issues with bugs regarding latest TS/Angular/CLI combinations. I can understand error because we are humans, I can understand time because we need to sleep and have to live, but I do hate purposeful indifference, just because its not your problem. I'm open to work myself on the CLI on a new PR, but I do need guidance, and that really starts at least with a single answer in a timelapse of 10 days. Nevertheless, thank you for your efforts.

  2. niklas-dahl commented on Sep 12, 2016

    @niklas-dahl
    Contributor

    This is my current "solution":

    gulpfile.js:

    let path = require('path');
    let gulp = require('gulp');
    let pug  = require('gulp-pug');
    
    let pugFiles = './src/**/*.pug';
    
    gulp.task('compilePug', () => {
      gulp.src( pugFiles )
        .pipe( pug().on('error', () => console.log('JADE ERROR')) )
        .pipe( gulp.dest('./src') );
    });
    
    gulp.task('default', ['compilePug'], () => {
      gulp.watch(pugFiles, ['compilePug']);
    });
    

    .vscode/settings.json:

    {
      "files.exclude": {
          "src/app/**/*.html": {"when": "$(basename).pug"}
      }
    }
    

    This actually works but it's obviously only a temporary solution..

  3. ShadowManu commented on Sep 12, 2016

    @ShadowManu
    Author

    My team is using pug-cli with --watch at the moment for the same results. However, I would prefer jade to be part of the webpack bundling itself. I'll submit a PR if I have time to figure out how to set it up.

  4. theklausster commented on Sep 16, 2016

    @theklausster

    Any news on how to add pug to cli?

    I opened a thread on Stockoverflow aswell, hoping for some result
    http://stackoverflow.com/questions/39518500/how-to-add-pug-to-angular-cli

  5. ShadowManu commented on Sep 18, 2016

    @ShadowManu
    Author

    Opened a PR to see how this goes.

  6. added
    P5The team acknowledges the request but does not plan to address it, it remains open for discussion
    on Sep 21, 2016
  7. filipesilva commented on Sep 21, 2016

    @filipesilva
    Contributor

    Heya @ShadowManu, we're not trying to be indifferent and I'm sorry that the jade support has fallen to the wayside.

    I can't say jade/pug support is a big on our radars right now to be honest. If you can get a PR to work I'm happy to review it, but bear in mind that it needs to have tests and documentation.

    See https://github.com/angular/angular-cli#development-hints-for-hacking-on-angular-cli for a way to start working with a local copy of the CLI.

    The command that runs the e2e suite is node tests/e2e_runner.js. Have a look at https://github.com/angular/angular-cli/tree/master/tests/e2e/tests/build/styles for sass/less/styl tests.

    You should test that the the correct html is generated, and that base jade/pug functionality (like imports) works.

    Regarding documentation, something akin to https://github.com/angular/angular-cli#css-preprocessor-integration should be enough.

    Ideally we'd also support initializing a project with pug like we do with sass (ng new sassy-project --style=sass), or setting the default template language (ng set defaults.styleExt scss) but to be honest that's further down the road.

  8. ShadowManu commented on Sep 21, 2016

    @ShadowManu
    Author

    Thanks man. I'll be looking at the tests and a proper similar documentation as soon as I have time.

  9. jurienhamaker commented on Oct 10, 2016

    @jurienhamaker

    Any updates @ShadowManu ?

  10. nvrossett commented on Oct 14, 2016

    @nvrossett

    @ShadowManu please, you can look too the support to (lost-grid and/or jeet.gs) and rupture in stylus too?

  11. ShadowManu commented on Oct 15, 2016

    @ShadowManu
    Author

    @kingsdevelopment @filipesilva I've worked a little with some time I had on this, but got blocked on how to make the tests pass (specially on the time they take). I'll have a second try tomorrow.

    @nvrossett not that I have knowledge of it. And probably should be on a different PR/issue.

  12. qtleeq commented on Nov 24, 2016

    @qtleeq

    I just wanted to throw my support behind @tycho01 's pug-plugin-ng and pug-ng-html-loader. I used them to use pug with the Angular Class seed, and it really cleans up the syntax and makes development with Angular2 and pug very pleasant. I recommend checking it out:

    https://github.com/tycho01/pug-plugin-ng
    https://github.com/tycho01/pug-ng-html-loader

    (pug-ng-html-loader is just a fork of pug-html-loader which allows pug-plugin-ng to work)

  13. KiaraGrouwstra commented on Nov 24, 2016

    @KiaraGrouwstra

    @TaylorDennisLee: thanks. note that for Webpack 2 it should work without the additional loader as well now, see the readme.

    Edit: note that original pug syntax is not harmed/disabled; the plugin just patches the lexer to ensure this cleaner more natural (perspective: HTML) option is parsed correctly as well.

  14. qtleeq commented on Nov 24, 2016

    @qtleeq

    @tycho01 Okay, so now pug-plugin-ng should work with pug-html-loader, as long as you are using Webpack 2?

    Also, do you still have to do

    template: require('./myComp.pug')

    instead of:

    templateUrl: 'myComp.pug'

    Thanks,

    Taylor

  15. 17 remaining items

  16. ScallyGames commented on Feb 24, 2017

    @ScallyGames

    @MarkPieszak this was my current solution to this problem.
    Thanks for mentioning.

  17. ausir0726 commented on Mar 3, 2017

    @ausir0726

    hope some day can support pug in angular-cli

  18. Anthonyzou commented on Mar 5, 2017

    @Anthonyzou

    @mbonski
    Your example is really close.
    First install pug and pug-loader and use this example code.

    import { Component } from '@angular/core';
    @Component({
    selector: 'app-root',
     template: require('pug-loader!./app.component.pug')(),
     styleUrls: ['app.component.scss']
    })
    export class AppComponent {
      title = 'app works!';
    }
    

    The only difference is
    template: require('./app.component.pug')
    To =>
    template: require('pug-loader!./app.component.pug')()

    You may also need to add the following into typings.d.ts

    // telling the typescript compiler that there is a global function
    // called require. And to not freak out about references to it.
    declare var require: any;
    

    This also works for any other loader in the webpack universe

  19. donmahallem commented on Mar 5, 2017

    @donmahallem

    So far I got it working with ng eject BUT this does not work with tests which again does desire an appropiate loader.

    @Anthonyzou Your workaround does work for JIT but I don't seem to get it running with AOT.
    The error reads as follows:

    Error encountered resolving symbol values statically. Calling function 'template', function calls are not supported. Consider replacing the function or lambda with a reference to an exported function, resolving symbol abc in a/b/c

    Following the advice of the error and some sites regarding aot I tried:
    `
    export function template() {
    return require("pug-loader!./test.component.pug")();
    }

    @component({
    template: template()
    })`

    But it still errors with basicly the same message. Any ideas?

  20. Anthonyzou commented on Mar 5, 2017

    @Anthonyzou

    @donmahallem I actually have no idea, actually. This is adapted from a graphql angular2 example where they manually require a graphql file and it works with AOT. It must also depend on how the loader is built.

  21. filipesilva commented on May 22, 2017

    @filipesilva
    Contributor

    Heya all, this isn't a feature that we're looking at adding in the 1.x timeframe, but rather something that would happen as a third party addon using the upcoming addon system for v2+.

  22. svallory commented on Jul 28, 2017

    @svallory

    Guys, I made a pull request to allow tweaking webpack config with a file in the project root. For now, you can use the cli at https://github.com/cashfarm/angular-advanced-cli (branch 1.2.x)

    Install pug, pug-ng-html-loader and add a webpack.config.js with this to root of your project:

    module.exports = {
      module: {
        rules: [
          {
            test: /\.(pug|jade)$/,
            use: ['pug-ng-html-loader']
          }
        ]
      }
    }
    

    Then your components can use pug

    @Component({
      selector: 'app-root',
      templateUrl: './app.component.pug',
      styleUrls: ['./app.component.styl']
    })
    

    But your index has to stay in html.

  23. pexak commented on Sep 20, 2017

    @pexak

    Any update?

  24. MarkPieszak commented on Oct 1, 2017

    @MarkPieszak
    Contributor

    Going along with some of the recommendations above, I created a little script that can be ran to automatically insert the pug rule into the node_modules folder. @pexak

    This can be used as a temporary solution until it can be available natively. Note this could need to be updated & changed if the CLI changes the location or formatting of this file. It's naively searching for rules: [ within this specific file.

    npm i --D apply-loader pug-loader

    pug-rule-insert.js

    Now you can just create a simple js file with the code below (put it at your root project level).

    const fs = require('fs');
    
    const commonCliConfig = 'node_modules/@angular/cli/models/webpack-configs/common.js';
    const pug_rule = `\n{ test: /\.pug$/, loader: "apply-loader!pug-loader?self" },`;
    
    fs.readFile(commonCliConfig, (err, data) => {
      if (err) { throw err; }
    
      const configText = data.toString();
    
      if (configText.indexOf(pug_rule) > -1) {
        return;
      }
    
      console.log('-- Inserting .pug webpack rule -- ');
    
      const position = configText.indexOf('rules: [') + 8;
      const output = [configText.slice(0, position), pug_rule, configText.slice(position)].join('');
    
      const file = fs.openSync(commonCliConfig, 'r+');
      fs.writeFile(file, output);
      fs.close(file);
    });

    Running it

    Run it simply with: node pug-rule-insert.js or create a nice postinstall hook to do it for you on new installs.

    "postinstall": "node pug-rule-insert.js"

    Needed this for a client, hope this helps!

    Works with ng serve (even live reloads pug file changes) and AoT ng prod builds, even Universal + CLI projects! 🎁

  25. clovisj commented on Nov 3, 2017

    @clovisj
  26. chenzhiguang commented on Nov 29, 2017

    @chenzhiguang

    @MarkPieszak thank you. I used pug-html-loader and html-loader instead, it is working fine, including the include ./pug-file

    const pug_rule = `\n{ test: /.pug$/, loader: [ 'html-loader', { loader: "pug-html-loader", options: { doctype: 'html', pretty: true } } ], },`;

  27. oguimbal commented on Dec 16, 2017

    @oguimbal

    @MarkPieszak @clovisj @chenzhiguang
    [Warning] this trick works fine, as long as you do not name your template files something.TS.pug (which I used to do so they pop below their .ts counterpart in vscode)

    If you do so, your AOT builds will fail silently (at least on my machine, as of today)

    This one was f***ng hard to find. see #8904

  28. angular-automatic-lock-bot commented on Sep 7, 2019

    @angular-automatic-lock-bot

    This issue has been automatically locked due to inactivity.
    Please file a new issue if you are encountering a similar or related problem.

    Read more about our automatic conversation locking policy.

    This action has been performed automatically by a bot.

  29. locked and limited conversation to collaborators on Sep 7, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P5The team acknowledges the request but does not plan to address it, it remains open for discussion

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions