Vue学习之webpack

第三章

模块开发

 

一. 了解模块开发

 

1、当一个js中使用另外一个js的方法或者属性时,用到了模块化的导出与导入  

1)、comminjs的导出module.exports={传出的名称:要传出的属性名称或者方名称}
(2)、comminjs的导入 var {导入的属性名称或者方法名称}=require(‘./了解模块化01.js’)

 

 

二. ES6的模块开发

 

1、第一种导入导出

1)、export导出属性或者方法,(必须是一行)例子:export{flag,sum}
(2)、import{flag,sum} from "./JavaScript01.js":导入

 

 

2、第二种导入导出

 

1)、export default导出属性或者方法,(必须是一行)例子:export default ajh
(2)、import  aaaa from "./JavaScript01.js":导入
 (第二种默认导入导出只能设置一次)

 

 

三. webpack安装(打开运行输入cmd)

 

1、 安装webpack首先安装Node.js,Node.js自带了软件包管理工具npm

 

2、 查看自己的node版本:node -v(如果node不是有效命令说明未成功,进入https://blog.csdn.net/weixin_39477597/article/details/87784418网站对应说明下载)

 

3、 全局安装webpack(这里我指定版本号3.6.0,因为vue cli2依赖该版本):npm install webpack@3.6.0 -g(注意:安装完成后,重新进入命令界面输入webpack -v看下是否成功,如果提示webpack不是有效命令说明未成功!!!)

 

4、 局部安装webpack(后续才需要):--save-dev是开发的依赖,项目打包后不需要继续使用的

5、安装指定版本的webpack:npm install --save-dev webpack@3.6.0(# 不要忘记webpack4.+开始webpack-cli是必备的哦

 

5、 删除webpack:https://www.jianshu.com/p/119a825d8bba

(1)、删除全局webpack-cli:npm uninstall -g webpack-cli 

(2)、删除本地(局部)webpack-cli:npm uninstall webpack-cli

(3)、删除全局webpack:npm uninstall -g webpack

(4)、删除本地(局部)webpack:npm uninstall webpack

 四、webpack打包文件

(1)、打包js文件

 

 

 

 

 

 src是开发的js文件夹,dist是用webpack发布的js文件夹,页面调用时调用dist文件夹中的js,用命令:webpack ./src/main.js ./dist/qq.js意思是 用webpack把src中的main.js发布成dist中的qq.js

 

1、 更具有智能化,只写一个webpack时,就会自动编译好js文件(推荐使用):

 

(1):其次在html的同一级创建名字叫webpack.configjs文件

 

(2):当webpack.config.js配置好是用webpack命令直接执行会更方便!!!!

const path = require('path')
module.exports = {
    
entry: './src/main.js',//要编译的js文件

output: { path: path.resolve(__dirname,
'dist'),//编译好的路径__dirname找到当前坐在的位置

filename:'bundle.js'//编译好的名称
},
}

 

如果报这个错误时,将webpack.dev.config.js中的_dirname 改为 __dirname 注意这里是两个下划线谢谢!

(3):首先在命令界面cd …找到html页面的上一级文件夹,然后用npm init   package.json创建出来。

4):在package.json文件中添加"build":"webpack"字节,命令界面cd …找到html页面的上一级文件夹, 用命令npm run build把需要编译的js创建出来,

局部安装时npm install webpack@3.6.0 --save-dev安装成功后package.json会加入

 

 

 

 

 (2)、打包css文件

当有css文件时要在接收模块开发的js中加入require('./css/abc.css')使得调用css文件,

添加成功后在webpack.config.js文件中加入

module.exports = {
 entry: './src/main.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename:'bundle.js'
    },

    module: {
        rules: [
            {
                test: /\.css$/,
               use: ['style-loader','css-loader' ]
            }
        ]
    }
}

 

module.exports中添加module字节,添加相应的loader配置,下面是loader文档文档连接https://www.webpackjs.com/loaders/完成后,添加相应的loader命令,(这里添加的是style-loader和css-loader

npm install style-loader --save-dev和npm install css-loader --save-dev

webpack安装style-loader或者css-loader时报与webpack版本冲突的问题

解决问题的链接:https://blog.csdn.net/Xidian2850/article/details/103617081

 

(3)、打包图片文件

1. 安装局部的url-loader,命令npm install --save-dev url-loader@1。0.0版本的因为我用的webpack是3.6.0版本的(只要不起冲突就可以)

webpack.config.js文件中module字节中配置

 

{
        test: /\.(png|jpg|gif)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192//打包图片的大小
            }
          }
        ]
}

 

2.如果图片小于limit中的值时,会将图片编译成base64字符串形式

大于值时,需要下载 file-loader  命令npm install --save-dev file-loader@0.11.0版本的因为我用的webpack是3.6.0版本的(只要不起冲突就可以)

最后webpack.config.js文件中output字节中配置publicPath字节属性(其目的是为了在打包的css文件中引用的图片路径前加上dist/,因为打包的图片全都放到dist文件夹中)

output: {
        path: path.resolve(__dirname, 'dist'),
        filename:'bundle.js',
        publicPath:'dist/'
    },

 

3.基本完成了(注意,当需要打包的文件夹中ing文件中有多个文件,文件中都有一个相同的图片名称,这样的话打包出来的就会报错了,需要在webpack.config.js文件中module字节中配置

{
                test: /\.(png|jpg|gif)$/,
                use: [
                    {
                        loader: 'url-loader',
                        options: {
                            limit: 8000,
                            name:'img/[name].[hash:8].[ext]' //把打包带图片放到dist中创建出来的img文件夹(自动创建)中,原来的名称+哈希值中的8位+点缀名
                        }
                    }
                ]
            }

 

 (4)、ES6转ES5-babel

       

安装局部的babel-loader,命令npm install --save-dev babel-loader@7 babel-core babel-preset-es2015

webpack.config.js文件中module字节中配置

{
    test: /\.js$/,
    exclude: /(node_modules|bower_components)/,//exclude 排除
    use: {
          loader: 'babel-loader',
          options: {
          presets: ['@es2015']
          }
     }
}
 (5)、webpack打包vue

安装局部的vue,命令npm install  vue@2.5.21 --save(去掉-dev是因为vue开发运行都需要)

在webpack.config.js文件中resolve字节中配置

resolve:{
        alias:{
            'vue$':'vue/dist/vue.esm.js'
        }
    }

打包时报错:(这是因为vue版本过高的原因)

ERROR in ./src/main.js
Module not found: Error: Can't resolve 'vue' in 'D:\学习\学习代码\vue\Vue基础\WebApplication1\模块化开发\第二次学习模块化开发\webpack配置vue\src'
(6)、.vue文件封装处理
(1).创建app.vue文件(子组件中的模板放到这个文件中导出子组件)在主入口main.js中用import App from './vue/App.vue'方式导入子组件
安装局部的vue-loader和vue-template-compiler,命令npm install vue-loader@13.0.0 --save-dev和npm install vue-template-compiler@2.5.21 --save-dev(这里的vue-template-compiler版本必须
和vue版本一致
在webpack.config.js文件中rules字节中配置
 {
    test:/\.vue$/,
    use:['vue-loader']
 }
(7)、如果在导入时import App from './vue/App.vue'后面的.vue想要省略的话需要在webpack.config.js文件中resolve字节中配置一下
resolve:{
    extensions:['.js','.css','.vue']
}

 (8)、webpack中plugins(插件)的使用(场景:打包带文件中第一行注明版权问题)

 BannerPlugin版权插件(webpack自带插件)在webpack.config.js文件中plugins字节中配置



  const webpack=require('webpack')//导入webpack
 plugins:[
        new webpack.BannerPlugin('最终版权归库日天所有')
    ]

 (9)、webpack中html的plugins(插件)的使用(场景:打包时html文件,图片,js全都打包)
 
安装局部的html-webpack-plugin,命令npm install html-webpack-plugin@3.0.0 --save-dev 
HtmlWebpackPlugin插件在webpack.config.js文件中plugins字节中配置
plugins:[new HtmlWebpackPlugin({
            template:'index.html'
        })
    ]

注意:把在output中配置的publicpath删除

 (10)、webpack中js压缩的plugins(插件)的使用(场景:打包时js文件时压缩js大小)
安装局部的uglifyjs-webpack-plugin,命令npm install uglifyjs-webpack-plugin@1.1.1 --save-dev 
HtmlWebpackPlugin插件在webpack.config.js文件中plugins字节中配置
plugins:[
        new uglifyjsPlugin()
    ]

最后看一下webpack.config.js和package.json中完整的配置吧!!!
const HtmlWebpackPlugin = require('html-webpack-plugin')
const path = require('path')
const webpack=require('webpack')
const uglifyjsPlugin=require('uglifyjs-webpack-plugin')
module.exports = {
    entry: './src/main.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename:'bundle.js',
       // publicPath:'dist/'
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: ['style-loader','css-loader' ]
            },
            {
                test: /\.(png|jpg|gif)$/,
                use: [
                    {
                        loader: 'url-loader',
                        options: {
                            limit: 8000,
                            name:'img/[name].[hash:8].[ext]'
                        }
                    }
                ]
            },
            {
                test:/\.vue$/,
                use:['vue-loader']
            }
           
        ]
    },
    resolve:{
        alias:{
            'vue$':'vue/dist/vue.esm.js'
        }
    },
    plugins:[
        new webpack.BannerPlugin('最终版权归库日天所有'),
        new HtmlWebpackPlugin({
            template:'index.html'
        }),
        new uglifyjsPlugin()
    ],
    devServer:{
        contentBase:'./dist',
        inline:true
    }

}

 

{
  "name": "meetwebpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack",
    "dev":"webpack-dev-server --open"

  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "cs-loader": "^0.0.1",
    "file-loader": "^0.11.0",
    "html-webpack-plugin": "^3.0.0",
    "uglifyjs-webpack-plugin": "^1.1.1",
    "url-loader": "^1.0.0",
    "vue-template-compiler": "^2.5.21",
    "webpack": "^3.6.0",
    "webpack-cli": "^4.9.2",
    "webpack-dev-server": "^2.9.1"
  },
  "dependencies": {
    "css-loader": "^0.28.1",
    "style-loader": "^0.15.0",
    "vue": "^2.5.21",
    "vue-loader": "^13.0.0"
  }
}

 

posted @ 2022-02-23 17:36  猴猴手记  阅读(581)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end