【问题标题】:Is there a way to parcel a nodejs app which uses express and ejs?有没有办法打包使用 express 和 ejs 的 nodejs 应用程序?
【发布时间】:2019-11-10 21:29:42
【问题描述】:

我正在尝试打包使用 epxress 和 ejs 的 nodejs 应用程序,但在此过程中遇到了包裹错误

如果我使用标准方式,我的应用程序已经按预期运行: node app.js

但是,当我尝试使用 parcel 运行它时出现错误。

我的 package.json(仅显示相关部分):

  "scripts": {
    "start": "parcel views/index.ejs",
    "build": "parcel build --public-url . views/index.ejs"
  },
  "dependencies": {
    "parcel-plugin-ejs": "^0.2.0",
    "parcel-plugin-ejs-template": "^0.1.1",
  },
  "devDependencies": {
    "parcel-bundler": "^1.12.3"
  }

这就是我呈现页面的方式:

router.get("/" , function(req, res) {
  (async () => {
    const client = await pool.connect()
    try {
      const result = await client.query('select id, name from mytable')
      res.render("index", {
        items: result.rows
      })
    } finally {
      client.release()
    }
  })().catch(e => console.error(e.stack))
});

还有我的 index.ejs 文件:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">

  <title>My website</title>
</head>

<body>

<div class="menu">
    <% items.forEach(function(row){ %>
    <div class="item" data-value="<%= row.id %>"> <%= row.name %></div>
            <% }) %>
</div>
.
.
.
.

</body>

</html>

我希望我的应用能够成功打包并能够通过提供的 url 访问它。

但是,我收到此错误:

$ npm run start

> my_project@1.0.0 start /home/user/my_project
> parcel views/index.ejs

Server running at http://localhost:1234 
????  /home/user/my_project/views/index.ejs: items is not defined
    at eval (eval at compile (/home/user/my_project/node_modules/ejs/lib/ejs.js:618:12), <anonymous>:5:8)
    at returnedFn (/home/user/my_project/node_modules/ejs/lib/ejs.js:653:17)
    at EjsAsset.generate (/home/user/my_project/node_modules/parcel-plugin-ejs-template/EjsAsset.js:30:12)
    at <anonymous>

其中 items 只是我使用 res.render() 从后端发送的产品列表,以创建下拉列表。

任何帮助将不胜感激。

【问题讨论】:

  • 添加你的 index.ejs 文件和节点渲染代码。
  • 在哪里添加?
  • 在您的问题中。
  • 我已经检查过,github 上没有任何项目使用过你的包parcel-plugin-ejs。这可能意味着您使用的软件包实际上没有经过很好的测试,甚至可能根本无法正常工作。我建议与该软件包的作者联系,并检查这是插件问题还是您的方法问题。同样对我来说,您的方法似乎有点错误,我相信 parcel 期望您的应用程序的入口点,而不是您的情况下的 ejs 文件。一个例子github.com/azdanov/voting-app-node/blob/…
  • 谢谢你的建议,我会试试的

标签: node.js express ejs parceljs


【解决方案1】:

如果您更改 index.html 的 views/index.ejsstartbuild 脚本的部分。 ejs

【讨论】:

    猜你喜欢
    • 2013-09-09
    • 2011-09-30
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多