Angular 2 Universal - 使用手写笔和 pug 模板的服务器端渲染

Posted

技术标签:

【中文标题】Angular 2 Universal - 使用手写笔和 pug 模板的服务器端渲染【英文标题】:Angular 2 Universal - Server Side Rendering with stylus and pug template 【发布时间】:2016-10-01 02:39:03 【问题描述】:

我正在尝试使用 Angular2、typescript、stylus(用于 css)和 pug(用于 html 模板)构建一个应用程序。

但是,我不能让它与 Angular2 Universal 一起工作。

问题是我使用ts-node 来运行我的服务器代码,并且每当我导入我的应用程序组件时,都会发生错误。

server.ts (node/express):

import 'angular2-universal/polyfills';

import * as path from 'path';
import * as express from 'express';
import * as bodyParser from 'body-parser';


// Angular 2 Universal
import 
  provide,
  enableProdMode,
  expressEngine,
  REQUEST_URL,
  ORIGIN_URL,
  BASE_URL,
  NODE_ROUTER_PROVIDERS,
  NODE_HTTP_PROVIDERS,
  ExpressEngineConfig
 from 'angular2-universal';

// Application
import App from './app/modules/app';

发生错误:

app/modules/app/app.styl:2 margin-bottom: 10px ^ SyntaxError: Unexpected token :

app.ts

import Component, ViewEncapsulation from '@angular/core';
import RouteConfig, Router, ROUTER_DIRECTIVES from '@angular/router-deprecated';

import Home from '../home';


/*
 * App Component
 * Top Level Component
 */
@Component(
  selector:      'app',
  pipes:         [ ],
  providers:     [ ],
  directives:    [ ],
  encapsulation: ViewEncapsulation.None,
  styles:        [
    require('./app.styl')
  ],
  template: require('./app.pug')
)

app.styl

input
  margin-bottom: 10px

另一种方法是运行构建代码(由 webpack 生成)。但是我该怎么做呢,因为代码是由webpackjsonp 函数包装的。

【问题讨论】:

如果您将代码设为runnable example,将会很有帮助。 【参考方案1】:

您可以通过预编译使用stylus:stylus -> css -> styles: [require(.css)]

模板也可以像这样预编译或处理:

function compile(template:string)

      pug.compile(template, );


//component definition
template: compile(require('template.pug'))

【讨论】:

以上是关于Angular 2 Universal - 使用手写笔和 pug 模板的服务器端渲染的主要内容,如果未能解决你的问题,请参考以下文章

将 Angular 2/3/4/5/6 项目转换为 Angular Universal

Angular 2 Universal 中的身份验证,nodejs

Angular 2 Universal 404 Not Found 重定向

Angular-universal - 生产问题

Angular 5 Universal:在开发中使用 server.ts

使用Angular4(Angular Universal)的服务器端渲染[关闭]