随着前端体积越来越大,功能越来越丰富,这时候就需要将前端工程化,而webpack就是用于将前端各种文件打包起来。一个简单的webpack应该包含以下几个概念
-
<李>入口起点李>
<李>输出李>
<李>配置李>
<李>组件李>
<李>加载器李>
<李>插件李>
<李>模块李>
<李>模块热替换李>
首先说明,此情况不具备普遍性。若你的情况与笔者类似那么希望这篇文章能够帮到你。
我的项目情况是这样的:用node . js做后台,ejs做模板引擎(即整个页面是一个ejs文件)由node . js将数据渲染完成后,再将完整页面返回给用户。
<强>那么这样做会遇到的问题:强>
1只本项目没有html页面,ejs的作用也不是引入公共的组件,直接就是一个完整的页面,用webpack中处理ejs文件的装载机返回的是一个函数,故会产生问题
2。由于node . js配置了静态资源目录,而视图目录与之同级,webpack在处理图像等静态资源目录的路径的时候会产生问题
3。如果使用publicpath 那么nodejs在运行的时候就会找不到资源,因为设置了静态资源的目录
如果你也遇到了类似的问题,希望你能在本文中找到解决方法。
这里多说一句:不要觉得我的项目很奇怪,因为我当时写的时候,知识储备不足,等到后面发现不妥的时候,为时已晚。
改起来太麻烦,所以将错就错了…
<强> 1。处理ejs 强>
我在各个论坛,官网搜寻良久,始终没能找的到,能处理我这种情况的加载程序。
没有办法之下,只能换一个思路,将ejs文件先转为html
首先要修改文件,那么就要修改服务器的模板引擎(这里是我的app.js)
那么要修改成什么呢?我要让nodejs使用ejs模板引擎,但是使用html文件来渲染
这里我们要用的是表达中的app.engine 来注册一个引擎
代码如下:
app.set(“视图”,path.join (__dirname,“意见”));//设置模板引擎的目录 app.engine (“html”,要求(“ejs”) .renderFile); app.set(“视图引擎”、“html”);
这样我们就可以将原本观点视图目录中的ejs文件的后缀修改为html了
<强> 2. webpack处理html文件强>
首先引入我眼帘的是webpack插件:HtmlWebpackPlugin
我找了许多文章,文章中对html文件的处理无一列外都用到了这个插件
既然那么多人用,那么它的强大是毋庸置疑的。
但是配置好后运行webpack,报了一个当地人未定义的错误
报错代码:
由于当地人是由中表达的res.render()传回页面的数据,而在此时webpack处理的时候,理所当然的会报未定义的错误了。
那么这个问题怎么解决呢?
我现在需要让webpack帮我处理html中的资源,又要让webpack不要理会ejs的语法,帮我继续压缩代码,就陷入了一个十分难受的境地。
在搜寻良久无果后,一篇误打误撞的文章启发了我
这篇文章的博主是希望,webpack能够把ejs引入的模板打包到一个页面中,而我恰恰相反,我就是需要webpack不理会我的ejs代码。
于是解决办法氤氲而生。
首先我将原本html中的js代码抽离到. js中
然后以这个js文件为入口文件,再以原本的html文件为模板
用HtmlWebpackPlugin来生成我所需要的压缩过后的html
<>强解决代码强>
webpack.config.js
使用严格的; const path=要求(“路径”); const HtmlWebpackPlugin=要求(“html-webpack-plugin”);//打包ejs 模块。出口={ 条目:{ 测试:“。/测试。js ',//入口文件即一般来说app.js }, 模式:“生产”,//生产环境 输出:{ 路径:path.resolve (__dirname“构建”),//输出路径 文件名:“js/[名字]/[名字]. js”//输出后的文件名 }, 外部:{ jquery:“window.jQuery” },//外部加载的资源这些都是不需要进行打包的 模块:{ 规则:[//设置处理js文件的加载程序 {测试:/\ . js/美元,使用:“babel-loader”,排除:/node_modules/}, {测试:/\ . css/美元,使用:[“style-loader”、“css-loader”]}, { 测试:/\。(png | jpg | gif)/美元, 用途:[ { 装载机:“file-loader”, 选择:{ 名称:“图像/[名字][ext]。” } } ] }, { 测试:/\。(html)/美元, 用途:{ 装载机:“html-loader”, 选择:{ attrs: [': data-src] } } } ] }, 插件:[ 新HtmlWebpackPlugin ({ 名称:“测试”, 模板:“。/公共/init.html ',//模板文件 文件名:“视图/test.html ',//目标文件 使变小:{ collapseWhitespace:没错, collapseInlineTagWhitespace:没错, conservativeCollapse:没错, minifyCSS:没错, minifyJS:没错, removeComments:没错, trimCustomFragments:真 } }) ), 优化:{ 最小化:真//是否压缩代码 }详解webpack打包nodejs项目(前端代码)