(一)webpack配置loader,打包js和sass以及图片文件

什么是webpack?

模块打包工具,它可以分析项目结构,处理js依赖模块以及编译一些sass、less、typescript等语法,并将其打包成合适的格式供浏览器能够使用。

工作方式:

webpack把我们的项目当做整体,他可以通过给定的一个主文件(入口文件)找到项目中所有依赖的文件,通过loader处理他们并将他们打包成一个浏览器可识别的js文件

搭建webpack项目:
/全局安装(建议全局安装)
npm install -g webpack
//安装到你的项目目录
npm install --save-dev webpack
//使用
webpack {entry file/入口文件} {destination for bundled file/存放bundle.js的地方}
//webpack非全局安装的情况需要指定webpack的安装路径
node_modules/.bin/webpack app/main.js public/bundle.js

以上使用的方式操作复杂,使用起来容易出错。一般使用配置文件:
项目下新建webpack.config.js文件:
module.exports = {//暴露一个对象出去,webpack去读
        entry: __dirname + "/main.js", //唯一入口文件,__dirname是nodejs的一个全局变量,它指向当前执行脚本所在的目录(全路径,计算机绝对路径)
        output: {
            path: __dirname + "/public",//指定打包输出的目录(自动生成)
            filename: "bundle.js"//指定打包输出的文件名称
        },
        //生成source-map供浏览器去读,映射源文件分离展示方便调试,用'#source-map'也可以
        devtool: "#cheap-module-eval-source-map",
        //配置loader来处理文件
        module: {
            rules: [{//一个loader的具体配置
                test: /\.scss$/,//匹配的文件类型
                use: [{//loader处理的顺序是该数组中从右到左的顺序
                    loader: 'style-loader'//将 JS 字符串生成为 style 节点
                },{
                    loader: 'css-loader'//将 CSS 转化成 CommonJS 模块
                },{
                    loader: 'sass-loader'//将sass编译成css
                }]
            },{
                test: /\.(png|jpeg)$/,
                use: [{
                    loader: 'url-loader',
                    options: {//配置额外参数
                        limit: 1024, //限制转base64的图片为1k(1024b),超过1k的以url返回,设置此项需要安装依赖:file-loader,会将图片传到public下
                        outputPath: 'img/' //指定输出路径:放到public下的img文件下,如果没有则会自动新建,并且路片路径自动变成img/***.***
                    }
                }]
            }]
        }
}

目录结构(public文件以及下面所有文件应该都是由webpack生成的):


module2.js
module.exports = "font-weight: bold; color: green";

module1.js
let cssText = require("./module2");
module.exports = dom => (dom.style.cssText = cssText);

main.js
let cssModule = require("./src/js/module1");//module1中引用了module2
let cssFile = require("./src/sass/test.scss");//需要sass-loader(依赖node-sass)、css-loader、style-loader
//如果是less则是less-loader(依赖less)、css-loader、style-loader
let imgFile = require("./src/img/dog.png");

let dom = document.querySelector("#box"), img = document.querySelector("#img");
cssModule(dom);
img.src = "public/"+imgFile;
console.log(imgFile);

index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="box">
        my first webpack!!
        <img id="img" src="">
    </div>
<script src="public/bundle.js"></script>
</body>
</html>


package.json
{
  "name": "webpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^0.28.11",
    "file-loader": "^1.1.11",
    "node-sass": "^4.8.3",
    "sass-loader": "^6.0.7",
    "style-loader": "^0.20.3",
    "url-loader": "^1.0.1",
    "webpack": "^2.7.0"
  }
}




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue2项目中配置一个打包速度很快的Webpack文件,可以参考以下步骤: 1. 使用`vue-cli`创建一个Vue2项目: ``` vue create my-project ``` 2. 安装`webpack-merge`插件,用于合并Webpack配置: ``` npm install --save-dev webpack-merge ``` 3. 在项目根目录下创建一个`build`目录,并在其中创建一个名为`webpack.common.js`的文件,用于存放公共的Webpack配置: ``` const path = require('path'); const webpack = require('webpack'); const { VueLoaderPlugin } = require('vue-loader'); module.exports = { entry: { app: './src/main.js' }, output: { path: path.resolve(__dirname, '../dist'), filename: '[name].js' }, resolve: { extensions: ['.js', '.vue', '.json'], alias: { '@': path.resolve(__dirname, '../src') } }, module: { rules: [ { test: /\.vue$/, loader: 'vue-loader' }, { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/ }, { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, loader: 'url-loader', options: { limit: 10000, name: 'img/[name].[hash:7].[ext]' } }, { test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, loader: 'url-loader', options: { limit: 10000, name: 'fonts/[name].[hash:7].[ext]' } } ] }, plugins: [ new VueLoaderPlugin(), new webpack.optimize.ModuleConcatenationPlugin() ] }; ``` 4. 在`build`目录下创建一个名为`webpack.dev.js`的文件,用于存放开发环境的Webpack配置: ``` const merge = require('webpack-merge'); const common = require('./webpack.common.js'); module.exports = merge(common, { mode: 'development', devtool: 'cheap-module-eval-source-map', devServer: { contentBase: '../dist', hot: true }, module: { rules: [ { test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }, { test: /\.scss$/, use: [ 'style-loader', 'css-loader', 'sass-loader' ] } ] }, plugins: [ new webpack.HotModuleReplacementPlugin() ] }); ``` 5. 在`build`目录下创建一个名为`webpack.prod.js`的文件,用于存放生产环境的Webpack配置: ``` const merge = require('webpack-merge'); const common = require('./webpack.common.js'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); module.exports = merge(common, { mode: 'production', devtool: 'source-map', optimization: { minimizer: [ new OptimizeCSSAssetsPlugin() ] }, module: { rules: [ { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, 'css-loader' ] }, { test: /\.scss$/, use: [ MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader' ] } ] }, plugins: [ new CleanWebpackPlugin(), new MiniCssExtractPlugin({ filename: 'css/[name].[hash].css' }) ] }); ``` 6. 修改`package.json`文件,添加两个命令用于启动开发和生产环境的Webpack: ``` "scripts": { "serve": "webpack-dev-server --config build/webpack.dev.js", "build": "webpack --config build/webpack.prod.js" } ``` 7. 运行以下命令启动开发环境的Webpack: ``` npm run serve ``` 运行以下命令构建生产环境的Webpack: ``` npm run build ``` 这样,你就可以在Vue2项目中配置一个打包速度很快的Webpack文件了。其中,我们使用了`webpack-merge`插件来合并公共配置和环境特定的配置,使用了`clean-webpack-plugin`插件来清空打包目录,在生产环境中使用了`mini-css-extract-plugin`插件来提取CSS,使用了`optimize-css-assets-webpack-plugin`插件来优化CSS

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值