问题说明和复制步骤:
最新版本的Chrome宣布本机模块导入支持。 但是此功能需要提供完整的模块文件名(包括“ .js”扩展名)。
在库代码中,“ import ...”条目不具有“ .js”扩展名,这会在浏览器中导致404错误。
仅供参考:可能(在某些平台上确实)隐藏此问题的一件事是Web服务器配置。
OSX上的Apache Web服务器似乎默认启用了“ MultiViews”设置(如果未找到“ moment”文件,则服务器将找到“ moment.js”文件),但是在Ubuntu上,例如,此Web服务器选项已禁用,这将导致模块加载失败。
环境:
Ubuntu 16.04上的Chrome 61.0.3163.100(64位)
console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
VM3015:1 Thu Oct 05 2017 19:30:43 GMT+0600 (+06)
VM3015:2 05.10.2017, 19:30:43
VM3015:3 -360
VM3015:4 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
moment.js版本是2.18.1
这不只是一件镀铬的东西。 据我所知,ES6模块规范要求FromClause中有一个文件名,而不仅仅是一个字符串。 Rollup和Webpack在没有文件扩展名的情况下都可以正常工作,但这只是使捆绑更加容易。
总的来说,最好避免让任何加载程序猜测扩展名,是的,FromClauses应该确实是完整的文件名。
如果在支持该功能的浏览器中使用模块导入时,将源版本和编译版本都无效,将其分类将非常好。
只是将文件扩展名添加到导入中,这应该是一个快速修复。
同样对于希望使用编译版本的人-为了在全球范围内使用Moment,由于this
是undefined
,因此global
属性需要回退到window
undefined
。
最好通过社区驱动的PR来解决!
你去
这对于在Polymer WebComponent中使用非常有用。 现在,由于这个原因,我无法在标准ES6 Web组件中成功使用moment js。
这还是个问题吗? 我担心添加文件扩展名会导致Moment.js对于其他用户子集破坏...
最有用的评论
这不只是一件镀铬的东西。 据我所知,ES6模块规范要求FromClause中有一个文件名,而不仅仅是一个字符串。 Rollup和Webpack在没有文件扩展名的情况下都可以正常工作,但这只是使捆绑更加容易。
总的来说,最好避免让任何加载程序猜测扩展名,是的,FromClauses应该确实是完整的文件名。