Giter VIP home page Giter VIP logo

webpack-study's Introduction

程序员技术交流、面试、职场、生活、游戏、相亲,综合讨论QQ群:387017550,群内经常发红包,欢迎加入

核心竞争力:每周一次免费面试,在YY频道直播,可旁听,有往期录音

0、前注

本文内容源于webpack中文文档,以及我自己实践中写的若干DEMO。

每个DEMO以文件夹为单位,从入门到进阶,根据文件夹编号为准,逐步递进。

成文时,webpack版本是【3.8.1】

交流QQ群:387017550

0.1、安装webpack

首先你需要安装Node.js,点击打开Node.js下载页面。安装完Node.js后,会自带npm包管理器。

npm install webpack -g

这个命令将安装最新版本的webpack(全局,学习教程中推荐,避免多次安装。但实践中还是有必要一个项目一个webpack,避免版本冲突带来的bug)

目前版本是3.8.1(2017/11/27)

webpack -v

查看当前webpack版本

执行命令:

以下执行webpack命令时,指在对应文件夹下,通过控制台执行命令。

快速抵达对应目录的控制台(win):

在对应目录下,按住 shift,然后点击鼠标右键,在弹窗里选择在此处打开命令窗口即可启用

MAC 快速打开某个目录的终端:

参考这个链接

0.2、命令执行

安装(fork项目后,第一次运行每个项目之前,都需要执行一遍)

npm install

执行(不同项目,执行的命令可能不同,参照每个项目的文档,或者 package.json 里的 scripts 里的值)

// 一般使用(没有特殊要求,表示这个只是为了熟悉功能)
npm run test

// 开发环境使用(从 7、HMR 一节开始添加,)
npm run dev

// 生产环境使用(一般用于实战项目,或该项目同时有开发和生产两个版本的webpack配置)
npm run build

0.3、webpack的版本

当我们全局安装webpack之后,package.json 里也会有webpack,这两个webpack的版本,可能是不一样的。

那么当我们打包的时候,如何确认当前使用的是哪一个webpack版本呢?

使用全局的webpack的版本

通过直接执行 webpack 命令,将使用全局的 webpack 版本

webpack

使用当前项目的webpack版本

当我们通过 npm 命令来执行时,将使用当前项目的 webpack 版本。

例如:

npm run build

就将使用 node_modules 里面的 webpack 的版本。

0.4、快捷链接,点击快速抵达对应项目目录

1、最简单的webpack实例

2、简单指令(npm脚本)

3、入口(多入口)

4、出口

5、Loader

  1. babel-loader:用于将es6、es7等语法,转换为es5语法;
  2. css-loader:用于处理css文件(主要是处理图片的url);
  3. style-loader:将转换后的css文件以 style 标签形式插入 html 中;
  4. postcss-loader:一般用于添加兼容性属性前缀;
  5. less-loader:以 less 语法来写 css ;
  6. url-loader:用于将图片小于一定大小的文件,转为 base64 字符串;
  7. file-loaderurl-loader 不能转换 base64字符串 的文件,被这个处理(主要用于设置打包后图片路径,以及CDN等);
  8. html-withimg-loader:用于加载html模板;

6、开发环境

7、HMR 模块热加载

【实战1】打包一个CDN引入的jQuery项目

【实战2】打包一个bootstrap项目(打包文件带hash)

【实战3】打包有es6、es7语法的js代码

【实战4】打包带异步加载功能的模块

【实战5】打包一个具有常见功能的多页项目

webpack-study's People

Contributors

qq20004604 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

webpack-study's Issues

js部分好像有问题

修改foo.js文件,因为foo.js引用了bar.js,修改foo.js文件import {} from './bar.js'这行代码也会执行, 所以bar.js的代码也是会执行的

HMR那里,照搬代码失败。。。

webpack.config.js

const path = require('path');
const HtmlwebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');

// 定义一些文件夹的路径
const ROOT_PATH = path.resolve(__dirname);
const SCRIPT_PATH = path.resolve(ROOT_PATH, 'script/app.js');
const BUILD_PATH = path.resolve(ROOT_PATH, 'build');

module.exports = {
    //项目的文件夹 可以直接用文件夹名称 默认会找index.js 也可以确定是哪个文件名字
    entry: SCRIPT_PATH,
    output: {
        path: BUILD_PATH,
        filename: 'build.js', // 将script文件夹中的两个js文件合并成build目录下的bundle.js文件
        publicPath: '/'
    },
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [ 'style-loader', 'css-loader' ]
            } 
        ]
    },
    devServer: {
        contentBase: './build',
        hot: true
    },
    plugins: [
        new HtmlwebpackPlugin({
            title: 'hello~~'
        }),
        new webpack.NamedModulesPlugin(),
        new webpack.HotModuleReplacementPlugin(),
    ]
}

dev-server.js

const path = require('path');
const express = require('express');
const webpack = require('webpack');

const webpackDevMiddleware = require('webpack-dev-middleware');
const webpackConfig = require('./webpack.config');

const app = express(),
            DIST_DIR = path.join(__dirname, 'dist'), // // 设置静态访问文件路径
            PORT = 9090, // 设置启动端口
            complier = webpack(webpackConfig);

const devMiddlewart = webpackDevMiddleware(complier, {
    // 这里是对 webpackDevMiddleware 的一些配置,具体其他配置我们下面已经列出来了。

    //绑定中间件的公共路径,与webpack配置的路径相同
    publicPath: webpackConfig.output.publicPath,
    quiet: true     // 向控制台显示任何内容 
});

app.use(devMiddlewart);

// 设置访问静态文件的路径
app.use(express.static(DIST_DIR)) 

app.listen(PORT, function(){
    console.log('成功启动:localhost:'+PORT);
})

package.json

"scripts": {
    "start": "node dev-sever.js",
    "dev": "webpack-dev-server --open --config webpack.config.js"
  },

目录
webpack.config.js
dev-server.js
package.json
script
|---app.js
|---foo.js
|---bar.js
|---DOM.js

有试过转化为less吗

在转为less的时候,编译出来的方法里面
image
别的less文件导入后没办法使用这个方法

请教一个问题

对这篇文档没什么问题,由此衍生出来的一个问题,想请教一下。同时使用前缀和css-loader时候,两者好像有冲突,很多webkit的前缀都不存在了,有什么解决办法吗?

最后那段不严谨

2、简单指令(npm脚本)

“内容如下”,会让人误以为全部都要粘贴进去吧,但是 json 文件不能有注释。

最后 “这个是npm的特性,而不是webpack的,但是webpack基于nodejs所以可用。”
如果我运行的脚本是node index.js,那是说 node 是基于 node ?

npm script 的原理就是可以运行一段 shell 命令,webpack 就是一个 shell 命令所以可用更恰当吧。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.