前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >webpack 第二篇(搭建一个webpack)

webpack 第二篇(搭建一个webpack)

作者头像
菜的黑人牙膏
发布2019-01-21 16:22:28
5020
发布2019-01-21 16:22:28
举报
文章被收录于专栏:前端学习归纳总结

为了省事,我直接在github上clone了一个小型webpack项目, 这是地址:https://github.com/acexyf/WebpackTest

接下来会基于该项目进行webpack的一些构建进行拆解。

在clone项目后,通过npm install安装依赖包,然后执行npm start命令,然后打开view/index.html即可看到运行的结果。

首先,我们来看一下根目录下的package.json:

      首先是script对象,script对象就是简化执行命令,当我们执行npm start时也就是执行了webpack命令,实际开发中,要执行的命令通常比较长,需要在后面添加一系列的参数来暴露错误信息、压缩代码等,通过在package.json文件中配置,可以简化方便我们工作。如:(

        "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js"

) 执行npm dev即执行后面那个很长的命令。

  接下来的是devDependecies和dependecies对象, 这两个对象都是描述该项目所需要的依赖,配置后可以通过npm install一次安装,他们的区别在于,devDep是开发中需要而实际生产不需要的依赖,而depend即是生产和开发情况下都必须的依赖。有时候在开发时我们调试需要某个依赖,即安装到devDep即可,因为生产中并不需要该依赖。

第二个文件即是根目录下的webpack.config.js

代码语言:javascript
复制
let webpack = require('webpack');
let path = require('path');
let ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
    entry: {
        index: './public/javascript/entry.js'
    },
    output: {
        path: path.resolve(__dirname, 'build'),
        filename: '[name].bundle.js',
        publicPath: './build/'
    },
    module: {
        loaders: [
            { test: /\.css$/, loader: ExtractTextPlugin.extract('style-loader', 'css-loader') },
            { test: /\.(png|jpg|gif)$/, loader: 'file-loader?limit=8192&name=../[path][name].[ext]' },
            { test: /\.js[x]?$/, loader: 'babel' }
        ]
    },
    plugins: [
        //查找相等或近似的模块,避免在最终生成的文件中出现重复的模块
        // new webpack.optimize.CommonsChunkPlugin('common.js'),
        // new webpack.optimize.UglifyJsPlugin(),
        new ExtractTextPlugin('[name].css', { allChunks: true })
    ]
}

这里有四个主要点,即entry\output\module(loaders)\plugins, 关于他们的概念在上一篇文章中有解释,而其配置语法可以在官方中寻找,这里只要继续关注大概的结构。

接下来根据config.js中的entry属性找到入口文件,即'./public/javascript/entry.js'

代码语言:javascript
复制
// 引入css文件 该文件会通过css-loader等Loader转换成js文件类型以通过webpack的识别
require('../stylesheet/style.css');
// 引入module.js 即 text 等于 module.js文件中的module.exports
// 即 test = 'It works from module.js.'
let text= require('./module.js');
// 下面的是正常的js代码
let array = [1, 2, 3, 4];

class Person{
    constructor(name){
        this.name = name;
    }
    sayHello(){
        console.log(`hi I am ${this.name} `);
    }
}
let person=new Person('xyf')
person.sayHello();

document.write('It works.' + array[0]);
document.write(text);

关于模块,推荐阅读朴灵老师的深入浅出的node.js中的模块一章。

当我们只想npm start时, webpack会找到该入口文件,并打包成我们定义的output对象中的属性(文件名和输出位置),即最后会生成一个build文件夹如下:

最后是views/html,这个文件比较简单,就不贴代码了,单纯的引用我们打包后生成的bundle.js。

关于webpack,通过其插件和loader可以做非常多的功能,特别是热加载在开发中为程序员省下了很大的精力,推荐使用vue-cli搭建一个项目,可以参考该文章对其配置熟悉。

https://github.com/hehongwei44/my-blog/issues/205

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档