Gruntjs 是否有Grunt插件来编译用于服务器端渲染的Grunt视图?

Gruntjs 是否有Grunt插件来编译用于服务器端渲染的Grunt视图?,gruntjs,server-side,ng-view,Gruntjs,Server Side,Ng View,我有一个简单的angular应用程序,由Grunt.js管理。我对不同的页面使用角度路由器: index.html 路由对于客户端呈现非常有效,例如site.com、site.com/#/users等形式的请求。如果我应用$locationProvider.html5模式({enabled:true}),则直接调用site.com/users将失败,因为没有users.html或users/index.html文件。是否有一个智能grunt插件知道在构建分发目录时呈现布局内部的视图?也就是说,为

我有一个简单的
angular
应用程序,由
Grunt.js
管理。我对不同的页面使用角度路由器:

index.html 路由对于客户端呈现非常有效,例如
site.com
site.com/#/users
等形式的请求。如果我应用
$locationProvider.html5模式({enabled:true})
,则直接调用
site.com/users
将失败,因为没有
users.html
users/index.html
文件。是否有一个智能grunt插件知道在构建分发目录时呈现布局内部的视图?也就是说,为每个嵌套视图生成如下目录结构:

dist
├── index.html
└── users
│   └── index.html
├── css
│   └── app.css
└── js
    └── app.js

谢谢。

因此,请在评论中总结我们的讨论:

  • 要获得好的URL:您应该配置
    $locationProvider
    并将
    HTML5模式设置为true

  • 然后,您的服务器应该查看请求的文件夹(即,查找URL site.com/my folder/的文件夹my folder/),这样它就不会工作

  • 因此,您必须在htaccess中制定一个基本的重写规则(假设您在Apache服务器上工作),类似这样的规则(假设index.html是应用程序的入口点:

  • >

    来自角度文档:$location#服务器端


    除非您真的希望为客户机提供静态文件(出于任何原因),这就是解决方案。

    为什么服务器端渲染?你只想有带角度的常规URL?然后:是的,在应用程序内部导航时它工作正常。但是假设你在浏览器中粘贴链接
    site.com/users
    ,假设服务器是完全静态的,你会得到一个404。你需要以某种方式启动客户端应用程序,一个如果没有包含一些角度代码的静态html,这种情况就不会发生。不?所以,现在,当你在浏览器中复制/粘贴site.com/#/users时,你会得到一个404?不,这个可以正常工作。但是如果不使用散列,它就不会发生。好吧,我终于得到了:)
    <h1>Users</h1>
    ...
    
    var app = angular.module('app', ['ngRoute']);
    
    app.config(['$routeProvider', function($routeProvider) {
        $routeProvider.
            when('/', {
                templateUrl: 'views/_home.html',
                controller: 'HomeCtrl'
            }).
            when('/users', {
                templateUrl: 'views/_users.html',
                controller: 'UsersCtrl'
            }).
            otherwise({ redirectTo: '/' });
    }]);
    
    // ... controllers
    
    dist
    ├── index.html
    └── users
    │   └── index.html
    ├── css
    │   └── app.css
    └── js
        └── app.js
    
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^/index.html$
    RewriteCond %{REQUEST_URI} !\.(gif|jpe?g|png|css|js)$
    RewriteRule .* /index.html [L,R=302]