webpack编译多个.html文件

实现打包多个.html页面,分别引入不同js、css文件,并实现多页面热更新

  1. package.json文件:

{
  "name": "webpack_demo6",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack"  
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^6.7.3",
    "expose-loader": "^4.1.0",
    "html-loader": "^4.2.0",
    "html-webpack-plugin": "^5.5.0",
    "less": "^4.1.3",
    "less-loader": "^11.1.0",
    "mini-css-extract-plugin": "^2.7.5",
    "sass": "^1.59.3",
    "sass-loader": "^13.2.1",
    "style-loader": "^3.3.2",
    "webpack": "^5.76.2",   
    "webpack-cli": "^5.0.1",
    "webpack-dev-server": "^4.13.1"
  },
  "dependencies": {
    "jquery": "^3.6.4"
  }
}

"build": "webpack" //设置的快捷打包方式

"webpack": "^5.76.2", "webpack-cli": "^5.0.1", "webpack-dev-server": "^4.13.1" //注意下这几个的安装版本

"style-loader": "^3.3.2", "css-loader": "^6.7.3", "less": "^4.1.3", "less-loader": "^11.1.0", "sass": "^1.59.3", "sass-loader": "^13.2.1" //这几个loader是处理css文件的

"mini-css-extract-plugin": "^2.7.5", //该插件是将CSS提取到单独的文件中

"html-webpack-plugin": "^5.5.0", //该插件生成一个 HTML5 文件

"html-loader": "^4.2.0", //这个loader将 HTML 导出为字符串

"expose-loader": "^4.1.0", //允许暴露一个模块(整体或者部分)给全局对象(self、window 和 global)

2.webpack.config.js文件

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
    entry: {
        'about': path.resolve(__dirname, './src/about/about.js'),
        'product': path.resolve(__dirname, './src/product/product.js'),
    },
    output: {
        path: path.resolve(__dirname, 'dist'),  //打包后的文件存放的地方
        filename: 'js/[name].bundle.js',  //打包后输出文件的文件名
        chunkFilename: '[name].bundle.js',
        clean: true,
    },
    module: {
        rules: [
            {
                test: /\.css$/i,
                use: [MiniCssExtractPlugin.loader, 'css-loader'],
            },
            {
                test: /\.less$/i,
                use: [MiniCssExtractPlugin.loader, 'css-loader','less-loader'],
            },
            {
                test: /\.s[ac]ss$/i,
                use: [MiniCssExtractPlugin.loader, 'css-loader','sass-loader'],
            },
            {
                test:/\.(png|jpg|jpeg|svg|gif)$/i,
                /*type: 'asset',
                parser: {
                    dataUrlCondition: {
                        maxSize: 4 * 1024
                    }
                },
                generator: {
                    filename: 'images/[name][hash:8][ext]'
                }*/
                type: 'asset/resource',
                generator: {
                    filename: 'images/[name][ext]'
                }
            },
            {
                test: /\.(woff|woff2|eot|ttf|otf)$/i,
                type: 'asset/resource',
                generator: {
                    filename: 'font/[name][ext]'
                }
            },
            {
                test: /\.html$/i,
                loader: "html-loader",
            },
            {
                test: require.resolve("jquery"),
                loader: "expose-loader",
                options: {
                    exposes: ["$", "jQuery"],
                },
            },
        ],
    },
    plugins: [
        new HtmlWebpackPlugin({
            inject:'body',
            template:path.resolve(__dirname,'src/about/about.html'),  //指定模板文件
            filename: 'about.html',
            chunks: ['about'],
        }),
        new HtmlWebpackPlugin({
            inject:'body',
            template:path.resolve(__dirname,'src/product/product.html'),  //指定模板文件
            filename: 'product.html',
            chunks: ['product'],
        }),
        new MiniCssExtractPlugin({
            filename: 'css/[name]_bundle.css',  //输出文件的文件名
        }),
    ],
    mode:'development',
    devServer: {
        static: {
            directory: path.join(__dirname, 'dist'),
        },
        compress: true,
        port: 1000,
        open: true,
        hot: true,
    },
};
2.1、入口配置多个
entry: {
        'about': path.resolve(__dirname, './src/about/about.js'),
        'product': path.resolve(__dirname, './src/product/product.js'),
    },
2.2、输出配置
output: {
    path: path.resolve(__dirname, 'dist'),  //打包后的文件存放的地方
    filename: 'js/[name].bundle.js',  //打包后输出文件的文件名
    chunkFilename: '[name].bundle.js',
    clean: true,
},
2.3、 html 插件配置
plugins: [
        new HtmlWebpackPlugin({
            inject:'body',
            template:path.resolve(__dirname,'src/about/about.html'),  //指定模板文件
            filename: 'about.html',
            chunks: ['about'],
        }),
        new HtmlWebpackPlugin({
            inject:'body',
            template:path.resolve(__dirname,'src/product/product.html'),  //指定模板文件
            filename: 'product.html',
            chunks: ['product'],
        }),
        new MiniCssExtractPlugin({
            filename: 'css/[name]_bundle.css',  //输出文件的文件名
        }),
    ],
2.4、devServer热更新配置
devServer: {
        static: {
            directory: path.join(__dirname, 'dist'),
        },
        compress: true,
        port: 1000,
        open: true,
        hot: true,
    },

访问页面时,对应的页面加文件名,例如:

http://localhost:1000/about.html

http://localhost:1000/product.html

3.文件目录

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js是一个构建用户界面的渐进式框架,它的组件通常是以.vue文件的形式存在。而将.vue文件转换成.html文件并不是Vue.js的主要用途,因为.vue文件中包含了Vue组件的定义、样式和逻辑,转换成html文件会丢失很多信息,也无法直接运行。但是,如果你想将Vue组件嵌入到其他网页中,可以通过编译器将.vue文件转换成.js文件,再通过Webpack等工具打包成.js文件,最终在html文件中引用即可。 以下是将.vue文件转换成.js文件的方法: 1. 安装Vue的脚手架工具,命令如下: ``` npm install -g vue-cli ``` 2. 创建Vue项目,命令如下: ``` vue init webpack my-project ``` 其中,my-project是项目名称,可以自定义。 3. 进入项目目录,安装依赖,命令如下: ``` cd my-project npm install ``` 4. 创建.vue文件,例如HelloWorld.vue,内容如下: ```html <template> <div class="hello"> <h1>{{ msg }}</h1> </div> </template> <script> export default { name: 'HelloWorld', data () { return { msg: 'Welcome to Your Vue.js App' } } } </script> <style scoped> h1 { color: red; } </style> ``` 其中,template标签是模板部分,script标签是逻辑部分,style标签是样式部分。 5. 编译HelloWorld.vue文件,生成HelloWorld.js文件,命令如下: ``` npm run build ``` 6. 在网页中引用HelloWorld.js文件,例如: ```html <!DOCTYPE html> <html> <head> <title>Hello World</title> <script src="dist/build.js"></script> </head> <body> <div id="app"></div> <script> new Vue({ el: '#app', render: h => h(HelloWorld) }) </script> </body> </html> ``` 其中,dist/build.js是Webpack打包生成的文件,HelloWorld是Vue组件的名称,可以在script标签中import引入。最终,打开网页即可看到Hello World的效果。 需要注意的是,以上仅是将.vue文件转换成.js文件的简单示例,实际应用中还需要考虑代码分割、异步加载等问题,具体可以参考Vue的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值