美文网首页饥人谷技术博客
用 webpack 替换 requirejs 打包

用 webpack 替换 requirejs 打包

作者: 晓风残月1994 | 来源:发表于2017-11-06 18:15 被阅读1216次

这篇文章里,使用requirejs对项目进行了打包,现在替换为 webpack 进行打包:

可以看到项目文件夹下多了 package.json 和 webpack.config.js
文件,以及 node_modules 文件夹。
我在package.json 写入了webpack 打包所需要的依赖,以及定义了 scripts 字段,以便更方便的执行 webpack,但是使用webpack 之前,你还要 编辑 webpack.config.js 文件,众所周知,webpack 最重要的就是 如何写配置文件了:

const path = require('path'), //引入node 原生模块path,用来生成与当前系统相适应的绝对路径
  ExtractTextPlugin = require('extract-text-webpack-plugin'), //抽取 CSS 的插件
  WebpackNotifierPlugin = require('webpack-notifier'); //webpack 编译提示插件

  let base = {  //下面的 entry 入口字段,可以是字符串、对象、数组、函数等 ,这里使用 对象形式
    index: './src/js/app/index.js'
  }

  module.exports = {

    devtool: 'source-map', //配合 target 用来生成source-map 文件,以便 开发调试 debug 等, devtool 意指 开发工具
    target: 'web',
    entry: base,
    output: {    //指定输出目录,和文件名
      path: path.resolve(__dirname, 'dist'),
      filename: '[name].js'
    },

    resolve: {  //resolve字段最常用的就是 alias (别名)属性,用来把一些冗长的路径替换为简单的字符,以便js中引入模块时更简洁
      alias: {
        gotop: path.resolve(__dirname, 'src/js/com/gotop.js'),
        carousel: path.resolve(__dirname, 'src/js/com/carousel.js'),
        waterfall: path.resolve(__dirname, 'src/js/com/waterfall.js')
      }
    },

    plugins: [  //在最开始 require 插件后,这里还要在 plugins 字段中,创建插件实例
      new WebpackNotifierPlugin({
        title: 'Webpack 编译成功',
        alwaysNotify: true
      }),
      new ExtractTextPlugin({
        filename: "[name].css",
        disable: false,
        allChunks: true
      })
    ],

    module: {  //webpack 2 对比 webpack 1 在 module 字段这里做了改进,更符合逻辑和语义化
      rules: [
        {
          test: /\.css$/,
          use: ExtractTextPlugin.extract({  //以便在这里使用插件对象定义的的方法
            fallback: 'style-loader',
            use: {
              loader: 'css-loader',
              options: {
                sourceMap: true
              }
            }
          })
        }
      ]
    }

  }

最终输出的 js 文件只有一个,但是会有上万行代码:

因为其中包括了 jQuery 源码,以及对 AMD 规范,也就是对requirejs 语法的处理,否则我的模块中使用的 define 等模块定义的语法,浏览器当然是不认识的。

注意这里 虽然模块中还是用的AMD规范,但我并没有引入 requirejs 源码,因为首先 webpack 原生支持了 CommonJs 、AMD 等模块风格,编译时会自动识别进行处理,最终输出的打包文件中,虽然引入没有requirejs源码,但是 webpack 做了类似的定义,最终在html 中引入打包好的 js 文件,浏览器成功运行。

github 代码地址
演示地址

相关文章

  • 用 webpack 替换 requirejs 打包

    这篇文章里,使用requirejs对项目进行了打包,现在替换为 webpack 进行打包: 可以看到项目文件夹下多...

  • 前端日常问题记录

    1、react执行webpack打包后打开html空白页问题替换BrowserRouter为HashRouter ...

  • webpacke

    webpack 是一个【模块化管理工具】兼【打包工具】 是一个工具(和seajs,requirejs管理前端模块的...

  • webpack基本搭建

    webpack 是一个【模块化管理工具】兼【打包工具】 是一个工具(和seajs,requirejs管理前端模块的...

  • webpack 打包html img src问题

    最近,在看webpack打包图片的一些知识,首先webpack打包图片用的是url-loader; 当前loade...

  • 发现•分享—2019-01-10

    工具 使用webpack4提升180%编译速度 RequireJS路径深入详解 Webpack 源码解析 文章 C...

  • Webpack打包

    一、Webpack 1、webpack 是什么?有什么用?有哪些同类工具? (1)WebPack是一个前端资源打包...

  • webpack 笔记

    什么是 webpack,有什么用? webpack 就是一个打包工具,宗旨是一切静态资源皆可打包,分析项目结构,找...

  • webpack DefinePlugin 的奇妙用处

    这是一个简单的字符串替换插件,将我们所有经过 webpack 打包的 js 文件的对应的字符串都替换为我们在这个插...

  • CommonJS规范

    研究了一下CommonJS规范,用webpack打包之后,得到源码进行分析,只要分析webpack_require...

网友评论

    本文标题:用 webpack 替换 requirejs 打包

    本文链接:https://www.haomeiwen.com/subject/jqzlmxtx.html