代码之家  ›  专栏  ›  技术社区  ›  Marcus Grass

角服务工作,角构建不更新文件

  •  1
  • Marcus Grass  · 技术社区  · 6 年前

    我正在运行一个有角度前端和django后端的项目。今天,当我在模板中更改了一些代码时,ng构建没有更新。我发现它既不更新模板更改,也不更改组件。但是,当我运行ng serve并转到127.0.0.1:4200而不是django端口8000时,将呈现新的更新版本。

    我设置它的方式是,我有一个Django用templateviev指向的模板:

    {% load static %}
    {% csrf_token %}
    <!doctype html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <title>AngularWebapp</title>
      <base href="/">
    
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="icon" type="image/x-icon" href="favicon.ico">
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    </head>
    <body>
      <app-root></app-root>
    {% block javascript %}
    <script type="text/javascript" src="{% static 'runtime.js' %}"></script><script type="text/javascript" src="{% static 'polyfills.js' %}"></script><script type="text/javascript" src="{% static 'styles.js' %}"></script><script type="text/javascript" src="{% static 'vendor.js' %}"></script><script type="text/javascript" src="{% static 'main.js' %}"></script>
    <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
    {% endblock %}
    </body>
    </html>
    

    在settings.py中,静态目录布局如下:

    STATIC_URL = '/static/'
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'angular', 'static'),
        os.path.join(BASE_DIR, 'angular-webapp', 'dist', 'angular-webapp'),
    ]
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    

    和urls.py:

    from django.contrib import admin
    from django.urls import path, re_path, include
    from django.views.generic import TemplateView
    from rest_framework import routers
    from authentication.views import AccountViewSet, LoginView
    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    from django.contrib.staticfiles import views
    
    router=routers.SimpleRouter()
    router.register('accounts', AccountViewSet)
    
    class IndexView(TemplateView):
        template_name = 'index.html'
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('api/v1/', include(router.urls)),
        re_path(r'^api/v1/auth/login/$', LoginView.as_view(), name='login'),
        re_path(r'^.*/$', IndexView.as_view()),
        path('', IndexView.as_view()),
    ]
    

    这是我唯一拥有静态文件的地方,也是放置来自ng build的文件的地方,也就是说,静态加载从生成时输出的文件夹加载runtime.js等。

    但是,从昨天开始,我在Angular webapp/src/app文件夹中对应用程序所做的更改在构建时不会得到更新。我尝试删除dist文件夹以创建一个新的文件夹,但这不会改变任何内容。当它回来,我运行这个项目时,它仍然以某种方式使用旧的布局,而ng服务是完美的。

    我是否缺少了有关ng build如何工作的信息?

    1 回复  |  直到 5 年前
        1
  •  2
  •   Maryannah    6 年前

    这可能是一个缓存中断问题:您的文件仍然具有相同的名称,并且由于它们是由浏览器缓存的,所以它不会重新加载它们。

    考虑使用 --prod 标志,其中包含多个其他标志,如 --aot ,但若要更正您的问题,请尝试使用 --output-hashing=all .

    直接来自 ng build --help :

    --output-hashing=none|all|media|bundles 
      (String) Define the output filename cache-busting hashing mode.
      aliases: -oh <value>, --outputHashing <value>