当前位置: 首页 > 后端技术 > Node.js

自行配置前端开发环境2(生成html并打开开发服务器)

时间:2023-04-03 15:55:20 Node.js

我们接下来配置我们的开发环境。上次我们已经配置了最基本的打包配置,但是上次我们打包的是js文件,webpack可以编译js文件,但是对于其他的html、css、img等文件,还需要额外添加插件和loader包。我们今天要说的是如何打包编译html文件以及使用我们的开发服务器。使用html插件(html-webpack-plugin)webpack插件这里就不做说明了,需要的朋友可以去官网查看。由于webpack默认打包的文件是js文件,所以我们在打包html文件的时候需要引入插件。这里我们使用html-webpack-plguin插件来生成和打包我们的html文件。下载npminstall-save-devhtml-webpack-plugin配置让我们修改我们的webpack.common.js文件并在其中添加html-webpack-plugin插件的配置。现在我们webpack.common.js文件的配置是这样的:constpath=require("path");constHtmlWebpackPlugin=require("html-webpack-plugin");letconfig={mode:process.env.NODE_ENV===“发展”?“开发”:“生产”,条目:path.resolve(__dirname,“../src/main.js”),输出:{path:path.resolve(__dirname,“../dist”),文件名:“bundle[hash].js",},plugins:[newHtmlWebpackPlugin({filename:"index.html",template:"./src/index.html"}),],};module.exports=config;然后我们说一下html-webpack-plugin的配置选项有哪些,有什么用;NameTypeDefaultDescriptiontitle{String}WebpackApp用来生成文件的HTML文档的标题{String}'index.html'写HTML的文件。默认为index.html。这里可以指定子目录(如:assets/admin.html)template{String}``webpack模板的相对或绝对路径。默认情况下它将使用(如果存在src/index.ejs)。有关详细信息,请参见文档参见示例inject{Boolean\String}truetrue\\'head'\\'body'\\false将所有资产注入给定的模板或模板内容。当传递true或'body'时,所有javascript资源都将放置在body元素的底部。'head'会将脚本放在head元素中-请参阅inject:falseexamplescriptLoading{'blocking'\'defer'}'blocking'现代浏览器支持非阻塞javascript加载('defer')以提高页面启动性能。favicon{String}``将给定的favicon图标路径添加到输出HTMLmeta{Object}{}以允许注入元标记。例如,meta:{viewport:'width=device-width,initial-scale=1,shrink-to-fit=no'}base{Object\String\false}false被注入到base标签中。例如base:"https://example.com/path/page.htmlminify{Boolean\Object}true如果模式是'production',false否则控制输出是否最小化以及以何种方式最小化。有关更多详细信息,请参阅Seeminificationbelow.hash{Boolean}falseiftrue将唯一的webpack编译哈希附加到所有包含的脚本和css文件。这对于清除缓存很有用pagechunks{?}?只允许你添加一些块(例如,只有单元测试块)chunksSortMode{String\Function}auto允许控制将块包含到HTML之前应该如何排序。允许的值是'none'\'auto'\'dependency'\'manual'\{Function}excludeChunks{Array.}``允许您跳过一些块(例如不添加单元测试块)xhtml{Boolean}false如果为true,链接标签会自动关闭(符合XHTML)??这里有几个配置需要说明一下。title属性是配置我们生成的html文件的title标签中的内容,但是如果配置了template属性,则会使用你配置的模板文件中的title;inject属性是配置要注入的js文件的位置。默认为真,也可以使用字符串“body”或“head”。当为true或者字符串“body”时,会将打包后的最终js文件注入到生成的html文件的body中,当值为“head”时,则注入到head中。现在我们可以执行我们的打包命令了。npmrunstart之后,我们可以在dist目录中找到我们的index.html文件。html文件的body已经使用webpack-dev-server注入了我们打包好的js文件开发服务器安装webpack-dev-servernpminstall-save-devwebpack-dev-server配置在我们的webpack.dev.js文件中添加配置,现在我们的配置如下所示:constpath=require("path");constcommon=require("./webpack.common");constmerge=require("webpack-merge");module.exports=merge(common,{devServer:{contentBase:path.join(__dirname,"../dist"),compress:true,port:3000,open:true},});??webpack-dev-server中默认开启热配置,也就是热更新模块,可以让我们无需手动修改文件刷新页面,更改后立即可以看到;contentBase属性是为webpack-dev-server声明一个监听目录,可以监听变化目录下的文件变化;compress是开启gzip压缩;port显然是端口号;open启动webpack-dev-server后打开浏览器;这里还有一个默认的配置选项是host,也就是主机地址,默认是localhost,如果你需要在局域网内查看你的网页,可以修改配置为“0.0.0.0”即可。另外??看到这里有些朋友可能会觉得奇怪,contentBase给开发服务器设置了一个监控目录地址,而我们执行命令后却没有这个目录。这是因为webpack-dev-server打包运行在内存中的代码,这个目录实际上并不存在。启动开发服务器现在我们已经安装并配置了开发服务器,让我们配置npm命令来启动它,修改package.json文件中的脚本,添加dev配置并使用我们的webpack开发环境来配置“dev”:“webpack-dev-server--config./config/webpack.dev.js”,打开npmrundev等待服务器打开,它会自动打开我们的浏览器,现在我们可以使用html文件并打开我们的开发服务器为发展起来。github地址:https://github.com/hjyyang/jon-cli