3

如何将 PUG / JADE 正确安装到 Angular 2 或更高版本

这样在工作和 AOT 和 JiT

工作单元和集成测试

并且在创建每个新组件时不会受到太大影响

4

2 回答 2

3

我看到了很多解决方案,其中一些:

  1. 在每个组件中添加了类似“require!pug-loader()some.component.pug”的内容

  2. 摆脱使用 angular-cli 并围绕 webpack 创造魔法

  3. 使用其他服务器(谁知道如何使用 Pug / Jade)

  4. 在运行构建之前,将所有 pug 文件转换为 html

我认为他们会拒绝为 Angular 辩护的服务器 - 这不是真的,运行一些预编译器(它们会创建文件并在未来将它们发送给 gee),只要你拒绝 angular-cli 并使用 webpack - 错误出现(因为 Angular 编译的不是有效的 webpack 文件)

我是这样决定的:

npm install pug pug-loader --save-dev

第一步后将行添加到 package.json

"scripts": {
    "afterInstall": "node pug-rule-insert.js",
    ...
  }

然后使用以下内容创建文件 pug-rule-insert.js:

const fs = require('fs');
const commonCliConfig = 'node_modules/@angular/cli/models/webpack-configs/common.js';
const pug_rule = `\n\t\t\t\t\t\t\t\t{ test: /.(pug|jade)$/, 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; }

  const position = configText.indexOf('rules: [') + 8;
  const output = [configText.slice(0, position), pug_rule, configText.slice(position)].join('');
  let file = fs.openSync(commonCliConfig, 'r+');
  fs.writeFile(file, output, () => {});
  fs.close(file, () => {});
});

修复 Angular 6:

const commonCliConfig = 'node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs/common.js';

现在只需在终端中输入:

npm run afterInstall

该脚本放在您的主 WebPack 文件(位于 node_modules/angular/cli/models/webpack-config/common.js)行中,告诉 angular support pug

默认情况下,Angular 团队没有将其包含在支持中,因为它是必要的:

  1. 所有指令、事件(如点击)都应该用“,”分隔

    示例:p((click)='someFunction()', [title]='myTitle')

  2. 无法使用 mixin(将其替换为 ng-template 和 ng-container)例如

这也很神奇,但是 angular-cli 工作正常,所有测试工作,AoT 和 JiT - 工作

于 2018-02-01T06:20:59.813 回答
3

正如安东·佩戈夫所说:

对于 Angular 6+,您可以简单地运行ng add ng-cli-pug-loader...

请参阅原始答案: https ://stackoverflow.com/a/53091056/5318303

于 2019-03-17T08:27:20.047 回答