Golang 和 JavaScript 模块

我想将 Polymer LitElement 与 Go 后端结合使用。通过 LitElement,我在 JavaScript 模块中实现了 Web 组件!对于服务器端的路由,我使用 Gorilla Mux,如下所示


mux := mux.NewRouter()

mux.PathPrefix("/").Handler(http.FileServer(http.Dir("./wwwroot")))

这会正确加载静态 html 文件。当 html 文件引用实现 Web 组件的js文件时,我收到以下错误(在 Chrome 中):


无法加载模块脚本:服务器以非 JavaScript MIME 类型“text/plain”进行响应。根据 HTML 规范对模块脚本强制执行严格的 MIME 类型检查。


当我将组件模块重命名为扩展名mjs时,文件会正确加载,但 LitElement 的模块无法加载,并出现相同的错误。由于我对所有第三方 JavaScript 模块的文件扩展名没有影响,我不知道如何解决这个问题。


(我想如果我使用 Polymer 3 而不是 LitElement,我也会遇到同样的问题)


有任何想法吗?


更新


以下是请求 lit-element.js JavaScript 模块的输出curl


PS C:\Test\Polymer\LitElement> curl http://localhost:8082/node_modules/lit-element/lit-element.js


StatusCode        : 200

StatusDescription : OK

Content           : /**

                     * @license

                     * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.

                     * This code may only be used under the BSD style license found at

                     * http://polymer.github.io/LICENSE.txt

                     * Th...

RawContent        : HTTP/1.1 200 OK

                    Accept-Ranges: bytes

                    Content-Length: 8925

                    Content-Type: text/plain; charset=utf-8

                    Date: Thu, 26 Sep 2019 11:38:23 GMT

                    Last-Modified: Sat, 26 Oct 1985 08:15:00 GMT


                    /**

                     * @licen...

Forms             : {}

Headers           : {[Accept-Ranges, bytes], [Content-Length, 8925], [Content-Type, text/plain; charset=utf-8], [Date,

                    Thu, 26 Sep 2019 11:38:23 GMT]...}

Images            : {}

InputFields       : {}

Links             : {}

ParsedHtml        : mshtml.HTMLDocumentClass

RawContentLength  : 8925

注意内容类型!!!


MMTTMM
浏览 91回答 2
2回答

隔江千里

您确定到达了正确的终点吗?请参阅那个小示例(您可以尝试在您的主机上进行检查)$ tree.├── main.go└── wwwroot&nbsp; &nbsp; └── test.js1 directory, 2 files$ cat main.go&nbsp;package mainimport (&nbsp; &nbsp; "net/http"&nbsp; &nbsp; "github.com/gorilla/mux")func main() {&nbsp; &nbsp; mux := mux.NewRouter()&nbsp; &nbsp; mux.PathPrefix("/").Handler(http.FileServer(http.Dir("./wwwroot")))&nbsp; &nbsp; http.ListenAndServe(":8080", mux)}$&nbsp; cat wwwroot/test.js$ go run main.go &[1] 11841$ curl -v http://localhost:8080/test.js*&nbsp; &nbsp;Trying ::1:8080...* TCP_NODELAY set* Connected to localhost (::1) port 8080 (#0)> GET /test.js HTTP/1.1> Host: localhost:8080> User-Agent: curl/7.65.3> Accept: */*>&nbsp;* Mark bundle as not supporting multiuse< HTTP/1.1 200 OK< Accept-Ranges: bytes< Content-Length: 0< Content-Type: application/javascript< Last-Modified: Thu, 26 Sep 2019 12:12:15 GMT< Date: Thu, 26 Sep 2019 12:15:36 GMT<&nbsp;* Connection #0 to host localhost left intact

白衣染霜花

在我的项目中,我遇到了同样的问题。以下是我的解决方案:在tsconfig.json文件中,make"target": "es5"
打开App,查看更多内容
随时随地看视频慕课网APP