如何在凤凰城的js文件中指向摘要资源文件

时间:2016-11-30 16:40:30

标签: phoenix-framework brunch

如何从js文件中指向文件网址?这是我想要实现的代码片段。

const currentCacheName = "sample-app-v2";

self.addEventListener('install', (event) => {
  const urlToCached = [
    '/',
    '<%= static_path(@conn, "/css/app.css") %>', // Adding .eex on the js file won't work.
    '<%= static_path(@conn, "/js/app.js") %>'
    // Add fonts, icon, etc.
  ];

  event.waitUntil(
    caches.open(currentCacheName).then(function(cache) {
      return cache.addAll(urlToCached);
    })
  );
});

self.addEventListener('activate', (event) => {
  event.waitUntil(
    caches.keys().then((cacheNames) => {
      return Promise.all(
        cacheNames.filter((cacheName) => {
          return cacheName.startsWith('sample-app-') && cacheName != currentCacheName;
        }).map((cacheName) => {
          return cache.delete(cacheName);
        })
      );
    })
  );
});

self.addEventListener('fetch', (event) => {
  event.respondWith(
    caches.match(event.request).then(function(response) {
      if(response) return response;
      return fetch(event.request);
    })
  );
});

我正在尝试使用serviceworker的凤凰,但我需要获取最新的摘要资产文件才能正常工作。

1 个答案:

答案 0 :(得分:0)

有几种方法可以做这样的事情。其中之一是将您的JS文件从静态资产转换为模板 - 为此创建路径,控制器,查看并将JS代码移动到模板文件(例如 - 在web / templates / script /下的script.js.eex)你把你的控制器命名为ScriptController,视图就是ScriptView。在这种情况下,您将能够在JS代码中使用模板标记,并在需要时从Web应用程序的根目录提供脚本。这与向Phoenix应用程序添加新路由/页面完全相似。此外,您应该禁用此类路由的伪造保护(从路由器中的管道中删除:protect_from_forgery)。这样做的一个缺点就是你将失去这个脚本的所有JS管道,因此没有像这样的转换和其他东西。