开发者社区> 巴黎香榭> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

一周精通Vue(四)webpack-Plugin

简介:
+关注继续查看

webpack-Plugin

  • 版权plugin
plugins: [
            new webpack.BannerPlugin("author: 清水云")
        ]
  • html-webpack-plugin
# 配置打包HTML文件
# 安装插件
npm install html-webpack-plugin --save-dev

# 配置plugin
    plugins: [
        new webpack.BannerPlugin("author: 清水云"),
        new HtmlWebpackPlugin({
            template: 'index.html'
        })
    ]
  • uglifyjs-webpack-plugin
# 安装插件  
npm install uglifyjs-webpack-plugin@1.1.1 --save-dev

    plugins: [
        new webpack.BannerPlugin("author: 清水云"),
        new HtmlWebpackPlugin({
            template: 'index.html'
        }),
        new UglifyjsWebpackPlugin()
    ]
# 配置后打包可以将打包后的js压缩
  • webpack-dev-server
# 安装插件 内存打包 页面实时监听刷新 
npm install --save-dev webpack-dev-server@2.9.3 

# 配置插件

     // 开发内存实时加载文件服务
     devServer: {
         // 服务于那个文件件
         contentBase: './dist',
         // 实时监听
         inline: true,
         // 指定端口
         port: 23333,
     }
通过命令 启动
npm run dev

    "dev": "webpack-dev-server --open"
  • webpack-merge
安装  可以合并配置config.js文件
npm install webpack-merge
  • 配置文件分离与merge

    把 webpack.config.js改成三个文件
    
// file: base.config.js

const path = require('path');

module.exports = {
    // 打包入口文件
    entry: './src/main.js',
    // 出口文件
    output: {
        // 出口文件绝对路径
        path: path.resolve(__dirname, '../dist'),
        // 打包后的文件名字
        filename: 'bundle.js',
        // 打包时动态修改文件加载地址
        // publicPath: 'dist/'
    },
    module: {
        rules: [
            {
                test: /\.css$/i,
                // css-loader 只负责将css文件加载
                // style-loader 负责将样式添加到dom中
                // 这里配置顺序需要注意 是从后向前加载的
                use: ['style-loader', 'css-loader'],
            },

            {
                test: /\.less$/,
                use: [
                    {
                        loader: "style-loader" // creates style nodes from JS strings
                    },

                    {
                        loader: "css-loader" // translates CSS into CommonJS
                    },

                    {
                        loader: "less-loader" // compiles Less to CSS
                    }
                ]
            },

            {
                test: /\.(png|jpg|gif|jpeg)$/,
                use: [
                    {
                        loader: 'url-loader',
                        options: {
                            // 当加载图片时  文件大小 小于limit时 会将图片编译成base64字符串形式
                            // 当加载图片时  文件大小 大于limit时 需要使用file-loader模块进行加载
                            limit: 9999,
                            // 打包后文件的命名规则
                            // [name] 文件打包前的名字
                            // [hash:8] 截取8位hash值
                            // [ext] 扩展名
                            name: 'img/[name].[hash:8].[ext]'
                        },

                    }
                ]
            },

            {
                test: /\.js$/,
                // exclude 转换的时候排除的内容
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['es2015']
                    }
                }
            },

            {
                test: /\.vue$/,
                // vueloader
                use: ['vue-loader']
            }
        ],
    },
    resolve: {
        alias: {
            // 指定 在其他地方导入vue的时候 vue来自哪里
            // 在node_modules/vue/dist/ 中 默认是 vue.runtime.esm.js 修改为 vue.esm.js
            'vue$': 'vue/dist/vue.esm.js'
        }
    },

};
// file:dev.config.js
const WebpackMerge = require('webpack-merge');
const baseConfig = require('./base.config');

// 合并配置文件
module.exports = WebpackMerge(baseConfig, {
    // 开发内存实时加载文件服务
    devServer: {
        // 服务于那个文件件
        contentBase: './dist',
        // 实时监听
        inline: true,
        // 指定端口
        port: 23333,
    }
});
// file: prod.config.js
const UglifyjsWebpackPlugin = require('uglifyjs-webpack-plugin')
const WebpackMerge = require('webpack-merge');
const baseConfig = require('./base.config');

// 合并配置文件
module.exports = WebpackMerge(baseConfig, {
    plugins: [
        new UglifyjsWebpackPlugin()
    ],
});

最后在package.json 中指定加载配置文件

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --config ./build/prod.config.js",
    "dev": "webpack-dev-server --open --config ./build/dev.config.js"
  },

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Vue组件入门(一)组件定义及使用
Vue组件入门(一)组件定义及使用
10 0
Vue组件中表格文字内容太长,自动变省略号,鼠标悬浮上去显示全称。
Vue组件中表格文字内容太长,自动变省略号,鼠标悬浮上去显示全称。
20 0
CDN方式使用Vue组件通信
CDN方式使用Vue组件通信
7 0
前端-vue基础63-非父子组件传值
前端-vue基础63-非父子组件传值
22 0
vue简单实现词云图组件
JavaScript也有许多可以用来生成词云图的库,但我自己其实都没有使用过,之前使用python的时候倒是用过python的wordcloud库,wordcloud库配合jieba库就可以很好的满足词频统计的需求,但在JavaScript这边我还没有了解很多词频统计这块的相关知识,在网上搜索了一番好像都没有搜索到有有关词频统计的相关库,而在词云生成这一方面的相关库倒是发现有不少,如:js2wordcloud、wordcloud2 等等……这些库都很好地实现了词云图片的展示,现在我也尝试着简单封装一个自己使用的简洁版词云图
153 0
纯CSS实现悬浮提示并封装成vue组件
🎈平时给文字加悬浮提示,我们通常都是直接使用title属性来实现,但是这样的效果并不好看,那我们可以自己动手做一个tooltip悬浮提示框吗?说做就做,让我们一起来看看✍️
126 0
记一次简单的vue组件单元测试
记一次简单的vue组件单元测试
132 0
+关注
巴黎香榭
一个有梦想的咸鱼~~~
文章
问答
文章排行榜
最热
最新
相关电子书
更多
基于webpack和npm的前端组件化实践
立即下载
从Web到Cloud App
立即下载
从Web到Cloud App——YunOS Web App 开发经验分享
立即下载