zoukankan      html  css  js  c++  java
  • 使用WebPack打包

    环境配置

    安装淘宝镜像

    npm install -g cnpm --registry=https://registry.npm.taobao.org #安装淘宝镜像
    cnpm -v   #查看版本
    

    Webpack安装

    #//全局安装
    cnpm install -g webpack
    #//安装到你的项目目录
    cnpm install --save-dev webpack
    

    项目配置

    项目初始化

    #自动创建这个package.json
    cnpm init
    
    #安装Webpack
    cnpm install --save-dev webpack 
    

    Demo配置

    {
      "name": "jswebpack",
      "version": "1.0.0",
      "description": "a demo about webpack",
      "main": "index.js",
      "scripts": {
        "watch": "webpack --progress --colors --config webpack.dev.config.js --watch",
        "build": "webpack --display-error-details --config webpack.dev.config.js",
        "deploy": "webpack --display-error-details --config webpack.pro.config.js"
      },
      "author": "Tan",
      "license": "ISC",
      "devDependencies": {
        "babel-core": "^6.26.0",
        "babel-eslint": "^8.2.1",
        "babel-loader": "^7.1.2",
        "babel-polyfill": "^6.26.0",
        "babel-preset-env": "^1.6.1",
        "babel-preset-es2015": "^6.24.1",
        "babel-preset-react": "^6.24.1",
        "clean-webpack-plugin": "^0.1.18",
        "extract-text-webpack-plugin": "^3.0.2",
        "file-loader": "^1.1.6",
        "html-webpack-plugin": "^2.30.1",
        "image-webpack-loader": "^4.0.0",
        "jquery-validation": "^1.17.0",
        "lodash": "^4.17.4",
        "style-loader": "^0.20.1",
        "url-loader": "^0.6.2",
        "webpack": "^3.10.0"
      }
    }
    
    

    开发环境

    webpack.dev.config.js

    const webpack = require('webpack'); //访问内置的插件
    const path = require('path'); //node path
    const CleanWebpackPlugin = require('clean-webpack-plugin');
    const ExtractTextPlugin = require('extract-text-webpack-plugin');
    //const HtmlWebpackPlugin = require('html-webpack-plugin');
    
    /**
     * 开发环境
     * @since  2018-02-01 17:29:38
     * @author Tan<tandamailzone@gmail.com>
     */
    const config = {
        //入口文件
        entry: {
            index: __dirname + '/script/index.js',
            detail: __dirname + '/script/detail.js',
            //部分通用的第三方库
            vendor: [
                __dirname + '/script/module/rem.js',
                __dirname + '/script/vendor/jquery.cookie.js',
            ]
        },
        //输入文件
        output: {
            filename: 'script/[name].js', //打包后输出文件的文件名
            path: path.resolve(__dirname, 'assets/src/') //打包后的文件存放的地方
        },
        //通过AMD方式载入全局配置
        externals: {
            jquery: 'window.$'
        },
        //开启sourceMap, 生成一个 DataUrl 形式的 SourceMap 文件.
        devtool: 'inline-source-map',
    
        //加载器
        module: {
            loaders: [
                {
                    //CSS加载器(css-loader)
                    test: /.css$/,
                    loader: ExtractTextPlugin.extract({
                        fallback: 'style-loader',
                        use: [
                            {
                                loader: 'css-loader',
                                options: {
                                    minimize: true //css压缩
                                }
                            }
                        ],
                        publicPath: '../'
                    })
                },
                {
                    //JS加载器(babel-loader)
                    test: /.js$/,
                    include: [
                        // 只去解析运行目录下的 src 和 demo 文件夹
                        path.join(process.cwd(), './js')
                    ],
                    loader: 'babel-loader',
                    query: {
                        presets: ['es2015'],
                    }
                },
                {
                    //图片资源加载器(url-loader)
                    test: /.(png|jpg|gif|svg)$/,
                    loader: 'url-loader?limit=10240&name=image/[name].[ext]'
                },
                {
                    //字体资源加载器(url-loader)
                    test: /.(woff)|(svg)|(eot)|(ttf)$/,
                    loader: 'url-loader?limit=1024&name=font/[name].[ext]'
                }
            ]
        },
    
        plugins: [
           /* new htmlWebpackPlugin({
                template: 'index.html',
                filename: 'index.html'
            }),*/
            //合并压缩css
            new ExtractTextPlugin({
                filename: 'style/[name].css'
            }),
            // 构建优化插件-提取公共代码
            new webpack.optimize.CommonsChunkPlugin({
                //common指引入(import)的文件, vender指entry中的vender
                names: ['common', 'vendor'],
                //重复资源超过阀值及提出来到公共文件中去
                minChunks: 2
            }),
            //在building之前删除以前build过的文件或目录
            new CleanWebpackPlugin(['assets/src/script/*.js', 'assets/src/style/*.css'], {
                root: __dirname, //当前根目录
                verbose: true, //开启在控制台输出信息
                dry: false //启用删除文件
            })
        ]
    }
    
    
    module.exports = config;
    

    生产环境

    webpack.pro.config.js

    const webpack = require('webpack'); //访问内置的插件
    const path = require('path'); //node path
    const CleanWebpackPlugin = require('clean-webpack-plugin');
    const ExtractTextPlugin = require('extract-text-webpack-plugin');
    //const HtmlWebpackPlugin = require('html-webpack-plugin');
    
    
    /**
     * 生产环境
     * @since  2018-02-01 17:29:38
     * @author Tan<tandamailzone@gmail.com>
     */
    const config = {
        //入口文件
        entry: {
            index: __dirname + '/script/index.js',
            detail: __dirname + '/script/detail.js',
            //部分通用的第三方库
            vendor: [
                __dirname + '/script/module/rem.js',
                __dirname + '/script/vendor/jquery.cookie.js',
            ]
        },
        //输入文件
        output: {
            //打包后输出文件的文件名
            filename: 'script/[name].js',
            //打包后的文件存放的地方
            path: path.resolve(__dirname, 'assets/src/')
        },
        //通过AMD方式载入全局配置
        externals: {
            jquery: 'window.$'
        },
    
        //开启sourceMap, 生成一个 DataUrl 形式的 SourceMap 文件.
        devtool: 'inline-source-map',
    
        //加载器
        module: {
            loaders: [
                {
                    //CSS加载器(css-loader)
                    test: /.css$/,
                    loader: ExtractTextPlugin.extract({
                        fallback: 'style-loader',
                        use: [
                            {
                                loader: 'css-loader',
                                options: {
                                    minimize: true //css压缩
                                }
                            }
                        ],
                        publicPath: '../'
                    })
                },
                {
                    //JS加载器(babel-loader)
                    test: /.js$/,
                    include: [
                        // 只去解析运行目录下的 src 和 demo 文件夹
                        path.join(process.cwd(), './js')
                    ],
                    loader: 'babel-loader',
                    query: {
                        presets: ['es2015'],
                    }
                },
                {
                    //图片资源加载器(url-loader)
                    test: /.(png|jpg|gif|svg)$/,
                    loader: [
                        'url-loader?limit=10240&name=image/[name].[ext]',
                        'image-webpack-loader' //图片压缩
                    ]
                },
                {
                    //字体资源加载器(url-loader)
                    test: /.(woff)|(svg)|(eot)|(ttf)$/,
                    loader: 'url-loader?limit=1024&name=font/[name].[ext]'
                }
            ]
        },
    
        plugins: [
            //压缩js
            new webpack.optimize.UglifyJsPlugin(),
            //合并压缩css
            new ExtractTextPlugin({
                filename: 'style/[name].css'
            }),
            // 构建优化插件-提取公共代码
            new webpack.optimize.CommonsChunkPlugin({
                //common指引入(import)的文件, vender指entry中的vender
                names: ['common', 'vendor'],
                //重复资源超过阀值及提出来到公共文件中去
                minChunks: 2
            }),
            //在building之前删除以前build过的文件或目录
            new CleanWebpackPlugin(['assets/src/script/*.js', 'assets/src/style/*.css'], {
                root: __dirname, //当前根目录
                verbose: true, //开启在控制台输出信息
                dry: false //启用删除文件
            })
        ]
    }
    
    
    module.exports = config;
    

    使用

    #监听模式运行
    cnpm run watch  
    
    #开发环境
    cnpm run build
    
    #生产环境
    cnpm run deploy
    
  • 相关阅读:
    Java并发包源码学习系列:基于CAS非阻塞并发队列ConcurrentLinkedQueue源码解析
    Java并发包源码学习系列:阻塞队列实现之LinkedBlockingDeque源码解析
    Java并发包源码学习系列:阻塞队列实现之LinkedTransferQueue源码解析
    Java并发包源码学习系列:阻塞队列实现之SynchronousQueue源码解析
    Java并发包源码学习系列:阻塞队列实现之PriorityBlockingQueue源码解析
    Java并发包源码学习系列:阻塞队列实现之LinkedBlockingQueue源码解析
    Java并发包源码学习系列:阻塞队列实现之ArrayBlockingQueue源码解析
    Java并发包源码学习系列:阻塞队列BlockingQueue及实现原理分析
    Java并发包源码学习系列:JDK1.8的ConcurrentHashMap源码解析
    Java并发包源码学习系列:挂起与唤醒线程LockSupport工具类
  • 原文地址:https://www.cnblogs.com/one-villager/p/use_webpack.html
Copyright © 2011-2022 走看看