webpack手动搭建es6+less开发环境及打包的代码教程

目标

首先可以实现开发环境,保存代码自动更新 其次,可以将代码进行压缩打包

实现

我们需要搭建一个webpack环境,没有node的自行百度安装,然后用npm安装webpack,全局安装:

npm i webpack -g

package.json文件内容

然后再一个文件夹内创建一个package.json文件,里面的内容为

{
  "name": "cli",
  "version": "1.0.0",
  "description": "个人搭建的es6开发环境",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack-dev-server --open --config build/webpack.config.dev.js",
    "build": "webpack --config build/webpack.config.prod.js"
  },
  "keywords": [],
  "author": "nan",
  "license": "ISC",
  "devDependencies": {
    "autoprefixer": "^7.1.5",
    "autoprefixer-loader": "^3.2.0",
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.2",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "css-loader": "^0.28.7",
    "extract-text-webpack-plugin": "^3.0.2",
    "file-loader": "^1.1.5",
    "less": "^3.0.0-alpha.3",
    "less-loader": "^4.0.5",
    "postcss-loader": "^2.0.8",
    "style-loader": "^0.19.0",
    "uglifyjs-webpack-plugin": "^1.0.1",
    "url-loader": "^0.6.2",
    "webpack": "^3.6.0",
    "webpack-dev-server": "^2.9.1"
  },
  "dependencies": {}
}

目录结构

然后创建文件目录,如:

2017111809074032.png

说明:
- app -源代码目录
- main.js -webpack的读取文件的主入口
- source -存放需要webpack处理的文件和代码
- build -webpack配置文件
- node_modules -node模块安装目录
- public -打包时,默认将文件生成到public目录
- .babelrc -babel的配置文件
- package.json -node配置文件

build目录代码

config.js 相关配置项

const path = require('path');
module.exports = {
    //设置唯一的入口文件
    mainJs: "./app/main.js",
    //服务开启的根目录
    server: "./public",
    //打包后输出的文件夹
    path: path.resolve(__dirname, "../public"),
    //输出的js文件的文件路径
    jsPath:"js/index.js",
    //输出的css文件的文件路径
    cssPath:"css/index.css",
    //输出的图片等文件的路径配置
    filePath:"./images/[name].[hash:7].[ext]",
    //设置文件转换成base64格式的大小
    limit:10000
};

webpack.config.dev.js 开发环境webpack处理的文件

const config = require("./config");
 
module.exports = {
    entry: config.mainJs, //已多次提及的唯一入口文件
    output: {
        path: config.path, //打包后的文件存放的地方
        filename: config.jsPath //打包后输出文件的文件名
    },
 
    //以下是服务环境配置
    devServer: {
        contentBase: config.server,//本地服务器所加载的页面所在的目录
        inline: true//实时刷新
    },
 
    module: {
        rules:[
            {
                test: /(\.jsx|\.js)$/,
                use: {
                    loader: "babel-loader"
                },
                exclude: /node_modules/
            },
            {
                test: /\.css$/,
                use:[
                    {
                        loader: "style-loader"
                    },
                    {
                        loader: "css-loader"
                    },
                    {
                        loader: 'postcss-loader'
                    }
                ]
            },
            {
                test: /\.less$/,
                use:[
                    {
                        loader: "style-loader"
                    },
                    {
                        loader: "css-loader"
                    },
                    {
                        loader: 'postcss-loader'
                    },
                    {
                        loader: "less-loader"
                    }
                ]
            },
            {
                test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
                use: {
                    loader: 'url-loader',
                    options: {
                        limit: config.limit,
                        name: config.filePath
                    }
                }
            },
            {
                test: /\.(eot|woff|ttf|woff2)(\?|$)/,
                use: {
                    loader: 'file-loader',
                    options: {
                        limit: config.limit,
                        name: config.filePath
                    }
                }
            }
        ]
    }
};

   

webpack.config.prod.js 打包生成环境代码的文件

const webpack = require("webpack");
const config = require("./config");
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
 
module.exports = {
    entry: config.mainJs, //已多次提及的唯一入口文件
    output: {
        path: config.path, //打包后的文件存放的地方
        filename: config.jsPath //打包后输出文件的文件名
    },
 
    module: {
        rules:[
            {
                test: /(\.jsx|\.js)$/,
                use: {
                    loader: "babel-loader",
                    options:{
                        presets: ['es2015']
                    }
                },
                exclude: /node_modules/
            },
            {
                test: /\.css$/,
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use:[
                        {
                            loader: "css-loader"
                        },
                        {
                            loader: 'postcss-loader'
                        }
                    ]
                })
            },
            {
                test: /\.less$/,
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use:[
                        {
                            loader: "css-loader"
                        },
                        {
                            loader: 'postcss-loader'
                        },
                        {
                            loader: "less-loader"
                        }
                    ]
                })
            },
            {
                test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
                use: {
                    loader: 'url-loader',
                    options: {
                        limit: config.limit,
                        name: config.filePath
                    }
                }
            },
            {
                test: /\.(eot|woff|svg|ttf|woff2|gif)(\?|$)/,
                use: {
                    loader: 'file-loader',
                    options: {
                        limit: config.limit,
                        name: config.filePath
                    }
                }
            }
        ]
    },
    plugins: [
        new webpack.BannerPlugin('nan出品,必出精品'), //文件自动添加内容
        //js 压缩混淆代码
        new UglifyJsPlugin(),
        //css文件配置
        new ExtractTextPlugin(config.cssPath),
    ],
};

   

配置.babelrc 和 postcss.config.js

.babelrc文件内容

{
    "presets": ["es2015","react"]
}

   

postcss.config.js文件内容

module.exports = {
    plugins: [
        require('autoprefixer')({
            browsers: ['last 5 version',"> 1%"] //前五种浏览器版本
        })
    ]
};

   

模块安装

在当前目录打开cmd,将package.json
然后在里面运行

npm i

   

进行所需模块安装

代码测试

在public文件夹内创建一个index.html作为浏览器的页面入口,里面代码写上

然后在app目录的main.js文件内,将index.js和index.less引入

  

//主文件目录,在这里面引入需要让webpack解析的文件

import "./source/index.less";
import "./source/index.css";
require("./source/index");

然后在inde.js和inde.less写一些相关代码

   

//less文件
body{
  background: red;
  background-image: url(./images/download.png);
  padding: 0;
  margin:0;
 
  p{
    width:100px;
    height:100px;
    background: yellowgreen;
  }
}
let a = [1,2];
[a[0],a[1]] = [a[1],a[0]];
console.log(a);

   

最后,在根目录运行命令

npm run dev

   

会发现页面会自动打开,然后显示你写的效果

2017111809074136.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值