如何使用 mix 设置 Alpine.js 3

Jan*_*sen 3 node-modules laravel-mix alpine.js

我在新项目中开始使用 Alpine.js v3 时遇到问题。这是我的 package.json 和 Alpine 设置:

  "devDependencies": {
    "laravel-mix": "^6.0.19"
  },
  "dependencies": {
    "alpinejs": "^3.0.6"
  }
Run Code Online (Sandbox Code Playgroud)
import Alpine from 'alpinejs'

window.Alpine = Alpine
window.Alpine.start()

Alpine.data('demo', () => ({
    open: false,

    toggle() {
        this.open = !this.open
    }
}))
Run Code Online (Sandbox Code Playgroud)

驱动此标记:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Demo</title>
    <script src="assets/app.js"></script>
  </head>
  <body>
    <div x-data="demo">
      <button @click="toggle">Expand</button>

      <div x-show="open">Content...</div>
    </div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我使用 laravel-mix 构建我的 javascript:

// webpack.mix.js

let mix = require('laravel-mix');

mix
    .setPublicPath('public')
    .js('src/app.js', 'public/assets');
Run Code Online (Sandbox Code Playgroud)

javascript 构建良好,页面加载没有错误,但是当我单击切换按钮时,内容按预期展开,但我在浏览器控制台中收到以下错误,并且内容不会在后续单击时隐藏。

未捕获(承诺中)TypeError:i 不是函数 app.js:2282:28

如果我推迟脚本或将其移动到底部,则页面在加载时会损坏,并且我会得到以下信息:

未捕获的类型错误:未定义不是非空对象 app.js:1995:12

谁能帮我修复我的设置吗?

Iha*_*nka 7

很可能您只是忘记向标签添加defer属性script

<script defer src="assets/app.js"></script>
Run Code Online (Sandbox Code Playgroud)

但也正如文档所说

如果您将 Alpine 导入到包中,则必须确保在导入 Alpine 全局对象时以及通过调用 Alpine.start() 初始化 Alpine 时在中间注册任何扩展代码。

所以将你的脚本更改为

import Alpine from 'alpinejs';

Alpine.data('demo', () => ({
    open: false,

    toggle() {
        this.open = !this.open
    }
}));

window.Alpine = Alpine;

// should be last
Alpine.start();
Run Code Online (Sandbox Code Playgroud)

注意:如果出现像assignment to undeclared variable data您这样的错误,可以将导入更改为import Alpine from 'alpinejs/dist/module.cjs';