我在这里和那里搜索过很少使用Pug (Jade)的问题,甚至更少的答案。我认为在 GitHub 中查找代码会给我一个答案,但只会带来更多的混乱、过时的代码和不起作用的 repos。
我想要的很简单:开发一个简单的 Node+Express+Postgress+Pug 站点,具有webpack 的实时重载功能。Postgress 还没有参与进来,因为使用 Webpack 作为开发辅助工具还没有奏效。
使用HMR和 html-webpack-plugin,我期待快速的开发体验。我的 *.pug 文件应该显示控制器发送的数据,就像我运行节点服务器而不是 Webpack 的webpack-dev-server时那样。此外,它无法刷新浏览器的更改。其他我对捆绑没有问题的东西都很好;它可以快速重新加载服务器更改等。
因为我没有做 SPA,而且我看到你必须为每个 *.pug 页面生成一个新的插件对象,所以我制作了一个简单的 js 实用程序来收集所有 *.pug 页面,所以我可以这样做:
new HtmlWebPackPlugin({
filename: 'index.html',
template: './src/views/pages/index.pug',
inject: true,
}), ...pugPages.pages(env),
我已经测试过了,它可以工作,所以我不需要编写和更新大量愚蠢的代码。
通过该 hack,我可以看到浏览器中呈现的 PUG 页面。但它们没有显示 Express 控制器发送的数据。例如:
index.js:
router.get('/', (req, res, next) => {
res.render('index', { msg: 'index page' });
next();
});
index.pug:
:
extends ../layout
block head
include ../partials/head
block content
h1 You are in #{msg}
//h1= htmlWebpackPlugin.options.title
//p Welcome to #{htmlWebpackPlugin.options.title}
//script.
// console.log(!{JSON.stringify(htmlWebpackPlugin.options)})
这只是显示“你在”。同样,如果由 Node 运行,它会显示正确的“您在索引页面中”。如您所知,我正在尝试使用htmlWebpackPlugin.options.title
. 但如果这是唯一可行的方法(通过该对象),我怎样才能从 Express 中获取数据?html-webpack-plugin 是否使模板成为静态的,从而使 pug 变得无用?
我在用着:
Node.js v10.16.0
darwin 16.7.0
npm 6.9.0
webpack 4.29.0
html-webpack-plugin 3.2.0
我做了一个更精简的分支,一切都准备好了,以便于帮助。这是: https ://github.com/nmaxcom/Express-pug-webpack