首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用webpack处理ejs视图

如何使用webpack处理ejs视图
EN

Stack Overflow用户
提问于 2020-06-22 06:12:11
回答 5查看 7.6K关注 0票数 4

我正在尝试使用node js配置我的网站的webpack,我也使用ejs作为视图。我已经尝试了很多方法来处理我的webpack中的ejs,但直到现在我都没有成功。

代码语言:javascript
复制
const path = require('path')
const nodeExternals = require('webpack-node-externals')

module.exports = (env, argv) => {
  return ({
    entry: {
      server: './src/app.js',
    },
    output: {
      path: path.join(__dirname, 'dist'),
      publicPath: '/',
      filename: 'main.js'
    },
    mode: argv.mode,
    target: 'node',
    node: {
      // Need this when working with express, otherwise the build fails
      __dirname: true,
      __filename: true,
    },
    externals: [nodeExternals()], // Need this to avoid error when working with Express
    module: {
      rules: [
        {
          // Transpiles ES6-8 into ES5
          test: /\.js$/,
          exclude: /node_modules/,
          use: {
            loader: "babel-loader"
          }
        },
        {
         test: /\.ejs$/,
         loader: 'ejs-loader',
         options: {
           esModule: false
         }
       }
      ]
    }
  })
}

当我使用HtmlWebPackPlugin时,我收到一些错误,因为<%- %>中的数据,好像他不知道这些数据是从哪里来的。例如,<%- include('partials/head.ejs') %>。有没有办法用webpack把我的视图当做ejs来处理?

EN

回答 5

Stack Overflow用户

发布于 2020-06-28 20:41:18

正如@JRichardsz所解释的那样,在NodeJS项目中使用EJS模板时,您不需要明确地使用Webpack。

而且,它只是隐式地捆绑了EJS模板(代码)。

尝试使用以下命令将文件与最新的Webpack.js捆绑在一起进行安装:

代码语言:javascript
复制
npm install --save-dev webpack

另外,尝试以下代码,并进行一些修复:

代码语言:javascript
复制
module.exports = (env, argv) => {
  return ({
    output: {
          path: path.resolve(__dirname, 'dist'),
          publicPath: '/',
          filename: 'main.js'
        }
        ...
        // in case, all of this doesn't work. Then, explicitly whitelist EJS using regex
        ...
        nodeExternals({
            whitelist: [/\.(?|ejs)$)],
        }),
        ...
    })
  }
票数 1
EN

Stack Overflow用户

发布于 2020-10-21 06:05:02

我知道几个月前就有人问过这个问题。但对于像我这样遇到这个问题的人来说,这就是我如何让它工作的。假设你使用的是webpack 4。

如果您尚未安装html-webpack-plugin

最重要的是,为了帮助解决这个问题,请安装raw-loader

将以下内容添加到您的webpack配置中

代码语言:javascript
复制
new HtmlWebpackPlugin({
  template: '!!raw-loader!./src/views/pages/<file-name-here>.ejs',
  filename: 'index.ejs',
  chunks: ['main', 'owl_carousel']
})

这就是魔力所在。当包含模板路径时,请确保包含!!raw-loader!后跟相对路径。

raw-loader在html插件创建文件时会忽略ejs使用的特殊语法。这基本上就像“嘿,插件忽略我放在这里的任何东西,给我拿到我的文件”。

票数 1
EN

Stack Overflow用户

发布于 2020-06-24 22:02:29

如果您想在nodejs项目中使用ejs,则不需要使用webpack。Webpack通常用于客户端渲染,如angular、vue、react等

查看这里:Which command should I use to minify and optimize nodejs express application?可以查看一些方法来优化在ejs或其他nodejs服务器渲染框架中使用的静态js文件。

ejs项目的基本结构为:

代码语言:javascript
复制
|____
|____server.js
|____views
| |____hello.ejs
|____package.json

hello.ejs是一个简单明了的模板,你可以在其中使用任何ejs代码,比如你的

代码语言:javascript
复制
<%- include('partials/head.ejs') %>

如你所见,你不需要webpack来运行ejs应用程序。

检查以下示例:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62504995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档