包裹不会重新加载对 HTML 页面的更改

Parcel does not reload changes to HTML page

我正在尝试起床 运行 Parcel 但我无法进行基本设置。我想提供一个静态 HTML 页面,该页面在更改时会自动重新加载。

当我转到 http://localhost:1234 时,Parcel 为我的页面提供服务。如果我更改 index.html 中的任何内容,它不会重新加载...或重新加载时出现空响应。

版本

parcel: 1.12.4
npm: 6.12.1
node: v13.3.0

index.html

<!doctype html>
<html>
    <head>
        <title>Tinsel town</title>

        <script src="app.js"></script>
    </head>

    <body>
        <h1>Tinsel…</h1>
    </body>
</html>

app.js

// empty

Shell

matt$ parcel index.html --log-level 5
[13:20:42]: Server running at http://localhost:1234 
[13:20:42]: Building...
[13:20:42]: Building index.html...
[13:20:43]: Building app.js...
[13:20:43]: Built app.js...
[13:20:43]: Built index.html...
[13:20:43]: Producing bundles...
[13:20:43]: Packaging...
[13:20:43]: Building hmr-runtime.js...
[13:20:43]: Built ../../../usr/lib/node_modules/parcel-bundler/src/builtins/hmr-runtime.js...
[13:20:43]: ✨  Built in 477ms.
[13:20:49]: Building...
[13:20:49]: Producing bundles...
[13:20:49]: Packaging...
[13:20:49]: ✨  Built in 2ms.

Vim 以及它如何保存文件是问题所在。

当您在 Vim 中保存时,它会重命名您正在编辑的文件并将当前缓冲区保存到文件位置:

           +------------+       +---------------------------------+
           | index.html +------>+ ~/.cache/vim/backup/index.html~ |
           +------------+       +---------------------------------+


                            index.html is now kaput!

              (no `MODIFY` filesystem event fired, only `DELETE`)


                        +----------+       +------------+
                        | *buffer* +------>+ index.html |
                        +----------+       +------------+

                        (`CREATE` filesystem event fired)

可以通过在 .vimrc:

中将 backupcopy 设置为 yes 来更改此默认行为
set backupcopy=yes " Necessary for ParcelJS to work

这会导致 Vim 直接写入您正在编辑的文件,进而导致 modification 事件在文件系统中触发。 Parcel 看到了这个,就做到了。

parcel watch 允许您 热重载 javascripthtml 但它会不创建 运行ning 开发服务器,因此您需要将两个 npm 命令组合到 运行 parcel 开发服务器以及热重载。

你可以创建一个结合两个 npm 命令的脚本,而不是 运行宁 2 个单独的终端选项卡

package.json 以下脚本设置为例

   "scripts": {
    "dev": "(parcel ./src/index.html) & parcel watch ./src/index.html",
    "build": "parcel build ./src/index.html"
  },

在您的终端中 运行:npm run dev

将脚本标签从 head 移动到 body 标签并添加 type="module" 属性。

像这样:

<!doctype html>
<html>
    <head>
        <title>Tinsel town</title>
    </head>

    <body>
        <h1>Tinsel…</h1>

        <script type="module" src="./app.js"></script>
    </body>
</html>

这应该可以解决您的问题。