Javascript 如何加载把手模板后,从dist文件夹的网页包建设?
我正在用express和Handlebar构建一个单页节点应用程序,但我对node是新手,在用webpack构建把手时遇到了问题。 我的文件夹结构如下所示: 我正在使用“express Handlebar”(),我需要在服务器上呈现一些模板来处理建筑标准布局(带有页眉、页脚和内容面板) 视图/布局/main.hbs:Javascript 如何加载把手模板后,从dist文件夹的网页包建设?,javascript,node.js,express,handlebars.js,express-handlebars,Javascript,Node.js,Express,Handlebars.js,Express Handlebars,我正在用express和Handlebar构建一个单页节点应用程序,但我对node是新手,在用webpack构建把手时遇到了问题。 我的文件夹结构如下所示: 我正在使用“express Handlebar”(),我需要在服务器上呈现一些模板来处理建筑标准布局(带有页眉、页脚和内容面板) 视图/布局/main.hbs: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Node with Webpack</title>
</head>
<body>
<main>
<header>
{{> header}}
</header>
{{{body}}}
<footer>
{{> footer}}
</footer>
</main>
</body>
</html>
server/router.js:
const express = require('express');
const router = express.Router();
const employeeController = require('../controllers/employeeController');
router.get('/', (req, res) => {
console.log('home')
res.render('home', {
layout: 'main'
});
})
router.get('/employees', employeeController.index);
module.exports = router;
config/webpack.config.js:
const path = require('path')
const HTMLWebpackPlugin = require('html-webpack-plugin')
const webpack = require('webpack')
module.exports = {
mode: 'development',
entry: {
main: ['@babel/polyfill', './src/index.js']
},
output: {
filename: '[name]-bundle-[hash].js',
path: path.resolve(__dirname, '../dist'),
publicPath: '/' //Absolute path
},
devServer: {
contentBase: 'dist',
hot: true,
overlay: true,
stats: {
colors: true
}
},
resolve: {
extensions: ['*', '.js'],
modules: [
path.resolve(__dirname, '..', 'node_modules'),
],
},
module: {
rules: [
{
test: /\.js$/,
use: [
{
loader: 'babel-loader'
}
],
exclude: /node_modules/
},
{
test: /\.css$/,
use: [
{
loader: 'style-loader'
},
{
loader: 'css-loader'
}
]
},
{
test: /\.scss|\.sass$/,
loader: ['style-loader', 'css-loader', 'sass-loader'],
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
query: {
limit: 10000,
name: 'images/[name].[hash:7].[ext]'
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 1000,
name: 'fonts/[name].[hash:7].[ext]'
}
},
{
test: /\.(webm|mp4)$/,
loader: 'file-loader',
options: {
name: 'videos/[name].[hash:7].[ext]'
}
},
{
test: /\.html$/,
use: [
{
loader: 'html-loader',
options: {
attrs: ['img:src']
}
}
]
},
{
test: /\.hbs$/,
use: [
{
loader: 'handlebars-loader',
query: {
partialDirs: [
path.join(__dirname, '../src/views', 'partials')
],
}
}
]
}
]
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new HTMLWebpackPlugin({
template: './src/views/layouts/main.hbs',
title:'Handlebars vew engine'
})
]
}
我想有一个单一的html文件,其中根据路径的网页将加载。现在在“npm运行构建”之后,“index.html”文件如下所示:
dist/index.html
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Node with Webpack</title>
</head>
<body>
<main>
<header><h3>header</h3></header>
<footer><h3>footer</h3></footer>
</main>
<script type="text/javascript" src="/main-bundle-55e1587718f042cecfec.js"></script></body>
</html>
带有网页包的节点
标题
页脚
我不知道我错过了什么,因为我是新来的,这是从网页上造成的还是我没有得到的路由问题,任何帮助都将不胜感激。您找到解决方案了吗?我也在努力解决同样的问题。很高兴与大家分享你的经验。
const path = require('path')
const HTMLWebpackPlugin = require('html-webpack-plugin')
const webpack = require('webpack')
module.exports = {
mode: 'development',
entry: {
main: ['@babel/polyfill', './src/index.js']
},
output: {
filename: '[name]-bundle-[hash].js',
path: path.resolve(__dirname, '../dist'),
publicPath: '/' //Absolute path
},
devServer: {
contentBase: 'dist',
hot: true,
overlay: true,
stats: {
colors: true
}
},
resolve: {
extensions: ['*', '.js'],
modules: [
path.resolve(__dirname, '..', 'node_modules'),
],
},
module: {
rules: [
{
test: /\.js$/,
use: [
{
loader: 'babel-loader'
}
],
exclude: /node_modules/
},
{
test: /\.css$/,
use: [
{
loader: 'style-loader'
},
{
loader: 'css-loader'
}
]
},
{
test: /\.scss|\.sass$/,
loader: ['style-loader', 'css-loader', 'sass-loader'],
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
query: {
limit: 10000,
name: 'images/[name].[hash:7].[ext]'
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 1000,
name: 'fonts/[name].[hash:7].[ext]'
}
},
{
test: /\.(webm|mp4)$/,
loader: 'file-loader',
options: {
name: 'videos/[name].[hash:7].[ext]'
}
},
{
test: /\.html$/,
use: [
{
loader: 'html-loader',
options: {
attrs: ['img:src']
}
}
]
},
{
test: /\.hbs$/,
use: [
{
loader: 'handlebars-loader',
query: {
partialDirs: [
path.join(__dirname, '../src/views', 'partials')
],
}
}
]
}
]
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new HTMLWebpackPlugin({
template: './src/views/layouts/main.hbs',
title:'Handlebars vew engine'
})
]
}
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Node with Webpack</title>
</head>
<body>
<main>
<header><h3>header</h3></header>
<footer><h3>footer</h3></footer>
</main>
<script type="text/javascript" src="/main-bundle-55e1587718f042cecfec.js"></script></body>
</html>