webpack安装与使用

webpack介绍:

WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式以供浏览器使用。webpack主要是针对打包整合开发文件,在系统运行的时候,需要进行统一打包成运行版本的工具。

开发时候,通常会将业务部分(main.js)和逻辑运算部分(calc.js)分开编写,实现明确的分工。此时两个部分分别写好之后,就可以用webpack进行打包。


一、先上node.js上下载node.js稳定版

webpack安装与使用_第1张图片

二、一路next安装好node.js之后是这样子的(记得路径根据自己的需要来配置好)

webpack安装与使用_第2张图片

三、window+R进入cmd命令行

输入命令:npm -v 查看版本号,看是否安装成功

四、安装nrm

输入命令npm install nrm -g

五、nrm命令:

① nrm ls  // 查看所有的支持源(有*号的表示当前所使用的源,以下[name]表示源的名称)
② nrm use [name]  // 将npm下载源切换成指定的源
③ nrm help  // 查看nrm帮助

④ nrm home [name]  // 跳转到指定源的官网

六、安装webpack

输入命令:npm install [email protected] -g  (我这里安装的是1.14.0版本的webpack)

到此webpack安装成功

七、webpack命令

进入到要打包的文件夹的底下,shift+鼠标右键,进入到命令行

打包命令:webpack 入口文件.js 输出文件.js

webpack安装与使用_第3张图片

打包成功(打包只需要打包一个js文件,webpack会将整个js文件所关联的其他js文件一起打包)

八、webpack配置文件的使用(webpack.config.js)

作用:可以将入口文件和输出文件的路径、文件名都配置起来,使将来在命令行面板中,输入webpack就可以实现打包,使命令在使用过程中变得更简单

通常,一个项目的结构会分为开发代码和打包以后的生成代码,开发的代码通常放在src文件夹中,打包以后生成代码通常放在dist文件夹张,如下图

webpack安装与使用_第4张图片

所以calc.js与main.js这两个开发文件应该放入src文件夹中,之后在跟目录下创建webpack.config.js文件

webpack安装与使用_第5张图片

webpack.config.js文件里面的内容:

module.exports={
    entry:'./src/main.js',  //指定打包的入口文件
    output:{
        path: __dirname +'/dist',  //注意:webpack1.14.0 要求这个路径是一个绝对路径
        filename:'build.js'   //输出的打包文件的文件名
    }
}

然后在根目录打开cmd命令窗口,输入webpack,打包成功!

webpack安装与使用_第6张图片

九、webpack实现css打包

webpack本身不支持css、less、sass、js、image等相关资源的打包工作,是借助于loader才实现资源的打包

webpack中使用css-loader和style-loader两个loader来处理css资源打包工作

用npm来安装css-loader和style-loader

首先:①在根目录下运行cmd命令:npm init

(如果运行过程中发生错误,尝试更新npm的版本:npm install npm -g)

②在根目录下就会生成一个package.json文件,然后执行命令:npm install css-loader style-loader --save-dev

安装成功后,会发现package.json中添加了这两个包的版本号,便于他人掌握项目所依赖的包,他人拿到package.json之后,只需要执行命令npm install就可以自动下载所依赖的包


③接下来开始打包css文件,打包到build.js当中

配置webpack.config.js文件:(加入module)

module.exports={
    entry:'./src/main.js',  //指定打包的入口文件
    output:{
        path: __dirname +'/dist',  //注意:webpack1.14.0 要求这个路径是一个绝对路径
        filename:'build.js'   //输出的打包文件的文件名
    },
    module:{
        loaders:[
            {
                test:/\.css$/,
                loader:'style-loader!css-loader'
            }
        ]
    }
}

现在可以看到,css文件并不在main.js文件中有所使用,所以要去改main.js文件,才能被打包

在main.js文件中加入:

//2.0导入site.css文件
require('../statics/css/site.css');

然后在在根目录输入命令:webpack

进行打包,至此,CSS文件打包成功!

十、webpack打包scss文件(打包scss文件需要依赖①css-loader ②style-loader ③sass-loader ④node-sass(这个包为sass-loader所依赖的))

改造main.js导入sass文件

//导入sass文件
require('../statics/css/site1.scss');

然后在webpack.config.js中配置scss的loader:

module.exports={
    entry:'./src/main.js',  //指定打包的入口文件
    output:{
        path: __dirname +'/dist',  //注意:webpack1.14.0 要求这个路径是一个绝对路径
        filename:'build.js'   //输出的打包文件的文件名
    },
    module:{
        loaders:[
            {
                test:/\.css$/,  //打包 .css文件
                loader:'style-loader!css-loader'
            },
            {
                test:/\.scss$/,   //打包 .scss文件
                loader:'style-loader!css-loader!sass-loader'
            }
        ]
    }
};

此时还没有sass-loader和node-sass这个包,需要用npm来下载这个包,如果已经安装有css-loader和style-loader的,为了防止报错,也要重新再安装一次,执行命令:npm install node-sass sass-loader css-loader style-loader

此时,用npm下载是会被墙的,所以不能用npm来下载了,用淘宝的cnpm,先安装cnpm,执行命令:npm install cnpm -g

再用cnpm来安装,执行命令:cnpm install node-sass sass-loader css-loader style-loader --save-dev

安装成功之后,执行打包:webpack

十一、webpack进行less文件打包

实现less文件打包所依赖的包有:①css-loader ②style-loader ③less-loader ④less(less-loader的依赖包)

用cnpm安装所有的包:cnpm install less less-loader style-loader css-loader --save-dev

在webpack.config.js中配置less的loader中增加:

{
                test:/\.less$/,   //打包 .less文件
                loader:'style-loader!css-loader!less-loader'
            }

在main.js中引用less文件

//4.0 导入site2.less文件
require('../statics/css/site2.less');

接下来执行webpack打包

此时如果报错Module not found: Error: Cannot resolve module '****'的话,可以先删除node_modules文件夹,然后通过cnpm install命令重新下载所有的包,下载完所有的包之后,再重新打包。

十二、webpack实现url请求资源的打包

比如说,在css文件当中设置背景图片:background-images:url(../imgs/home.png)

对这种背景图片的打包就是实现对url请求资源的打包

打包url()请求的资源需要安装的node包有:①url-loader ②file-loader(url-loader依赖的loader)

先执行命令安装这两个包:cnpm install url-loader file-loader --save-dev

安装成功之后,在webpack.config.js中配置这个loader

{
                test:/\.(png|jpg|gif)$/,   //打包 url请求的资源文件
                loader:'url-loader?limit=200000'  //limit表示显示限制 图片的大小为200K是临界值,小于200K的图片均被打包到build.js中去,请求图片就会很快
            }
然后进行打包:webpack,同上,如果出现报错的话删了node_modules再重新下载所有的包

这就打包完成了 !

此时,如果图片大于200K,webpack会自动将图片拷贝一份放到build.js同目录下,但是此时页面上是无法显示这个图片的,必须要用服务器才能够显示得出来。

十二、webpack-dev-server实现热加载和热刷新

当我们修改了代码之后需要不断的重新执行webpack命令重新打包然后回到浏览器刷新页面去查看,这种开发效率低下,所以使用webpack-dev-server当代码更新的时候自动重新打包和刷新浏览器。

需要安装的包有:①webpack  ②webpack-dev-server ③html-webpack-plugin

输入命令:cnpm install webpack webpack-dev-server html-webpack-plugin --save-devc(真的建议全程都用cpnm下载吧,npm各种被墙,是在是用不下去了)

①在package.json文件中配置webpack-dev-server命令:

"scripts": {
    "dev": "webpack-dev-server --inline --hot --open --port 5008"
  }

参数说明:--inline:自动刷新

--hot:热加载

--port:指定监听端口为5200

-- open:自动在默认浏览器中打开

--host:可以指定服务器的ip,不指定默认为127.0.0.1(localhost)

②在webpack.config.js中配置html-webpack-plugin:

在webpack.config.js的开头添加:

var htmlwp = require("html-webpack-plugin");

在module中添加(与loader同级):

plugins:[
        new htmlwp({
            title:'首页', //生成的页面标题首页
            filename:'index.html', //webpack-dev-server在内存中生成的文件名称
            template:'index1.html' //根据index1.html这个模板来生成
        })
    ]

③在cmd命令行中运行server:npm run dev

此时热刷新和热加载就能够完成了!而且引入的img文件也能够用了

webpack-dev-server在配置过程中会产生很多版本上的不兼容的问题,导致很多报错,我列举有其中一个报错的原因,请参考我的另一篇blog:npm run dev出现错误:Module build failed: TypeError: fileSystem.statSync is not a function解决方案

十三、使用webpack实现ES6语法转换为ES5语法

目前浏览器对于ES6的语法并不是100%支持,而对于ES5语法则是100%支持的,目前vue使用的是ES6语法

所要依赖的包有:①babel-core ②babel-loader ③babel-preset-es2015

④babel-plugin-transform-runtime(这个包主要是在打包.vue组件页面中的es6语法需要)

老规矩:cnpm install babel-core babel-loader babel-preset-es2015 babel-plugin-transform-runtime --save-dev

接着,在webpack.config.js中配置这个loader

module.exports={
    entry:'./src/main.js',  //指定打包的入口文件
    output:{
        path: __dirname +'/dist',  //注意:webpack1.14.0 要求这个路径是一个绝对路径
        filename:'build.js'   //输出的打包文件的文件名
    },
    module:{
        loaders:[
            .....,
            {
                test:/\.js/,   //将.js文件中的es6语法转成es5语法
                loader:'babel-loader',
                exclude:/node_modules/
            }
        ]
    },
    babel:{
        presets:['es2015'],  //配置将es6语法转换成es5语法
        plugins:['transform-runtime']  //这句代码就是为了解决打包.vue文件不报错
    },
    ...
};

然后打开服务器npm run dev

十四、利用webpack解析和打包 .vue组件页面

Vue项目中的每个页面都是一个.vue文件,这种文件,Vue称之为组件页面。必须借助于webpack的vue-loader才能够解析

所依赖的包有:①vue :vuejs核心包

②vue-loader :vue文件编译loader

③vue-template-compiler : vue模板编译,被vue-loader所依赖

④babel-plugin-transform-runtime : es6实时转换成es5语法

安装上述的包:注意vue包保存的位置和其余三个包不一样,但用npm install 都可以下载

cnpm install vue-loader vue-template-compiler babel-plugin-transform-runtime --save-dev

cnpm install vue --save

然后在webpack.config.js中添加以下配置:

babel:{
        presets:['es2015'],  //配置将es6语法转换成es5语法
        plugins:['transform-runtime']  //这句代码就是为了解决打包.vue文件不报错
    },

再配置一个loader:

{
                test:/\.vue$/,   //解析.vue组件页面文件
                loader:'vue-loader',
            }

十五、实现vue-router控制模块的集成

1.安装vue-router:cnpm install vue-router --save

2.在webpack打包入口js文件中(entry指定的那个文件main.js)配置如下:

//3.0将vue-router集成到这个项目中来
import vueRouter from 'vue-router';
//3.0.1 将VueRouter对象绑定到Vue对象上
Vue.use(vueRouter);

//3.0.2导入路由规则对应的组件对象
import login from './components/account/login.vue'
import register from './components/account/register.vue'

//3.0.2 定义路由规则
var router = new vueRouter({
    routes:[
    {path:'/login',component:login},
    {path:'/register',,component:register}
]});

//3.0 利用Vue对象进行解析渲染
new Vue({
    el:'#app',
    // render:function (create) {
    //     create(App)
    // }   //es5的写法
    //使用路由对象实例
    router
});



你可能感兴趣的:(webpack安装与使用)