【问题标题】:How to configure Vue2 environment with Silex or other PHP framework如何使用 Silex 或其他 PHP 框架配置 Vue2 环境
【发布时间】:2017-10-21 13:16:48
【问题描述】:

我正在尝试将 Vue2 配置为在本地开发环境中与 Silex 框架应用程序一起运行。我使用 CLI 工具创建了 Vue 应用程序。将 /build/dev-server.js 中的打开 URL 从 http://localhost/+port 更改为 http://localhost/,因此 npm run dev 将打开一个 Silex 应用程序。并在 php 视图中添加了以下脚本 url:http://localhost:8080/app.js

现在,当我运行 npm run dev 时,浏览器中的新标签页会使用 url http://localhost/ 创建。 Vue 应用程序运行,我看到了我的内容(因此 webpack 开发服务器运行)。问题是它不会热重载。当我检查浏览器控制台时,我看到该应用程序不断尝试打开 http://localhost/__webpack_hmr

所以问题是,如何配置 Vue 开发环境,以便它可以与 http://localhost:80 上的 Silex 框架和 http://localhost:8080 上的热重载 webpack 开发服务器一起使用,并且仍然能够通过打开 http://localhost/ 来运行应用程序

【问题讨论】:

    标签: webpack vue.js vuejs2 silex


    【解决方案1】:

    我使用Laravel,但是,在我的设置中并没有任何特定于 Laravel 的东西,所以这对你来说应该是一样的,只是对你的文件存储位置进行了一些调整:

    首先,您需要确保您的脚本是从webpack-dev-server 加载的,所以:

    <script src="http://localhost:8080/app.js"></script>
    

    我实际上将它放在基于环境变量的条件中,所以它只在我的开发系统中执行此操作并在生产中加载捆绑的 js。

    接下来,您需要确保您的 webpack 开发配置具有从 webpack-dev-server 提供的 app.js。你可以使用publicPath 来做到这一点,它应该指向你的javascript文件所在的目录:

    output: {
        path: path.resolve(__dirname, '../../../public/js/'),
        publicPath: 'http://localhost:8080/js/',
        filename: 'app.js'
    },
    

    出于我的目的,我还将路径设置为 public/js,因为这是我的 app.js 文件相对于 webpack 配置的位置,因此只需将其设置为 js 文件捆绑在 silex 中的任何位置.

    现在,您只想配置开发服务器:

    devServer: {
        hot: true, // this enables hot reload
        headers: { "Access-Control-Allow-Origin": "*" },
        host: "localhost",
        port: 8080,
        contentBase: path.join(__dirname, "../../../public"), // points to Laravel public folder
    },
    

    然后,我使用 npm-run-all 将 npm 脚本添加到 package.json - 我再次指向我的 php 服务器的 public 文件夹:

    "scripts": {
      "serve": "php -S localhost:80 -t public,
      "hmr": "webpack-dev-server --env=webpack.dev",
      "dev": "npm-run-all --parallel hmr serve"
    }
    

    现在你应该能够做到:

    npm run dev

    启动两台服务器,然后从 http://localhost:80 访问您的网站

    【讨论】:

    • 我的 package.json 看起来有点不同。看看这个:"scripts": { "dev": "node build/dev-server.js", "start": "node build/dev-server.js", "build": "node build/build.js", "lint": "eslint --ext .js,.vue src" },我想保持这个设置尽可能接近库存配置,同时保持它按预期工作。
    • 在 vue webpack 中,他们只是运行一个节点脚本来启动服务器并进行其他一些初始化。您可以使用 Api proxying 运行该特定的开发进程,看起来正在通过express 完成以避免CORS 问题。当然,这仍然要求您从 webpack 开发服务器而不是 PHP 服务器提供所有内容,这意味着您不能使用 Twig,并且需要通过 .html 文件挂载您的应用程序,这可能很好,具体取决于在您的设置中。
    • 感谢@craig_h,您的回答为我指明了正确的方向,我的解决方案与您的解决方案大约 90% 相似,因此接受了您的解决方案。
    猜你喜欢
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    相关资源
    最近更新 更多