Polymer 如何为IE11提供不同的web组件

Polymer 如何为IE11提供不同的web组件,polymer,web-component,polymer-2.x,Polymer,Web Component,Polymer 2.x,我已经将我的“polymer build”(V2.0)配置为仅为IE 11传输ES5版本,但现在我只需要为IE 11用户提供该版本,为所有其他浏览器提供ES6版本。实现这一目标的最佳方式是什么 理想情况下,无论哪个客户端页面使用我的自定义元素,我都希望只使用一个导入,并且在服务器上有一些逻辑来提供适当的版本,但是作为web组件的新手,如果有“正确的方法”,我不想推出我自己的解决方案(这可能会很糟糕)(到目前为止我还没有找到,但我会继续搜索) 谢谢。您应该使用能够检测浏览器功能的Web服务器 Po

我已经将我的“polymer build”(V2.0)配置为仅为IE 11传输ES5版本,但现在我只需要为IE 11用户提供该版本,为所有其他浏览器提供ES6版本。实现这一目标的最佳方式是什么

理想情况下,无论哪个客户端页面使用我的自定义元素,我都希望只使用一个导入,并且在服务器上有一些逻辑来提供适当的版本,但是作为web组件的新手,如果有“正确的方法”,我不想推出我自己的解决方案(这可能会很糟糕)(到目前为止我还没有找到,但我会继续搜索)


谢谢。

您应该使用能够检测浏览器功能的Web服务器

Polymer团队本身已经发布了一个nodeJS库,它读取您的
Polymer.json
文件,查看您的构建目录,并根据客户端浏览器支持的功能提供正确的构建。服务器本身也支持H2推送,这是一个很好的功能

这是我在
polymer.json
中的构建配置。它为每个功能生成不同的构建。我交叉检查了哪些版本的浏览器支持这些技术,并为每个必要的组合添加了一个构建

"builds": [{
  "name": "none",
  "browserCapabilities": [],
  "addServiceWorker": true,
  "bundle": true,
  "swPrecacheConfig": "sw-precache-config.js",
  "insertPrefetchLinks": true,
  "js": {
    "minify": true,
    "compile": true
  },
  "css": {"minify": true},
  "html": {"minify": true}
},
{
  "name": "noes6",
  "browserCapabilities": ["push", "serviceworker"],
  "addServiceWorker": true,
  "addPushManifest": true,
  "swPrecacheConfig": "sw-precache-config.js",
  "insertPrefetchLinks": true,
  "js": {
    "minify": true,
    "compile": true
  },
  "css": {"minify": true},
  "html": {"minify": true}
},
{
  "name": "nopush",
  "browserCapabilities": ["es2015", "serviceworker"],
  "addServiceWorker": true,
  "swPrecacheConfig": "sw-precache-config.js",
  "insertPrefetchLinks": true,
  "bundle": true,
  "js": {"minify": true},
  "css": {"minify": true},
  "html": {"minify": true}
},
{
  "name": "all",
  "browserCapabilities": ["es2015", "push", "serviceworker"],
  "addServiceWorker": true,
  "addPushManifest": true,
  "swPrecacheConfig": "sw-precache-config.js",
  "js": {"minify": true},
  "css": {"minify": true},
  "html": {"minify": true}
}]
还有一个简单的express服务器,它利用prpl服务器库进行差异服务(请记住,这是ES6语法):


这完全取决于您的服务器将使用什么…例如,polymer serve在“服务器”级别执行此操作,例如,它将相同的文件以不同的方式发送到较旧的浏览器…但您也可以构建和动态创建不同的html(从不同的路径导入)所以问题是您的服务器环境将是什么?我的服务器环境肯定不是“聚合服务”:-,我相信我们将使用Node或Apache。我希望有一种平台无关的“最佳实践”来为不同的浏览器提供服务(元素本身的某种简单逻辑,然后重定向到ES5或ES6,所有这些都是通过HTML中的一个导入语句完成的。也许我梦想太多了。
const prpl = require('prpl-server');
const express = require('express');
const config = require('./build/polymer.json');

const app = express();

app.get('/*', prpl.makeHandler('./build/', config));

app.listen(process.env.PORT || 80);