资讯专栏INFORMATION COLUMN

告别繁琐重复的webpack配置,直接上手撸代码

gghyoo / 2487人阅读

摘要:也就是说,和是两个相互独立的处理单元。那么这样给我们带来什么便利呢如果中出错,在中是不被察觉的。后面加入的入口,不影响入口,所以之前对的是依然生效的。只需要执行,就可以直接看到啦预览效果预览爱奇艺效果预览最后,欢迎各位

大家伙有没有这么一个烦恼:

想写一些简单的前端Demo,却被繁琐的webpack配置给恶心到?
于是乎便有了go-js的存在,我们只需要执行全局安装go-js,执行gojs指令,便可以执行前端代码
使用

执行如下bash脚本:

npm install -g go-js

mkdir workspace
cd workspace
echo "import $ from "jquery"
$(document.body).html("

GO!JS!

")" > jq.js # 执行并打开浏览器 /jq.js gojs -i jq.js # 以 jq.js 为入口文件进行打包,将打包进入当前目录下的 .dist/ 文件夹 gojs -b jq.js

同时支持自定义html模板,在同级目录下新建 jq.html 便会使用 jq.html 作为模板

于是便会自动安装 jquery 依赖,并打开浏览器,enjoy it!

概念

gojs 认为一个js文件就是一个入口(entry),也对应一个webpack compiler

特征

程序运行时,自动下载依赖包

入口动态添加
如,文件目录结构如下:

go-js-test/
├── a/
│   ├── a/
│   ├── jq.html
│   ├── jq.js
│   ├── style.css
│   └── style.less
├── jq.js
└── react.js

1.在 go-js-test/ 下执行 gojs .
2.请求 /jq.js
3.添加 jq.js 至入口中, webpack building....
4.请求 a/jq.js
5.添加 a/jq.js 至入口中, webpack building....

颗粒化 webpack compiler 和 HMR 的处理
在第二点(入口动态添加)中,对于jq.js和a/jq.js两个入口,分别各自对应webpack compiler 和 HMR 单元。
也就是说,jq.js和a/jq.js是两个相互独立的webpack处理单元。
那么这样给我们带来什么便利呢?

1. 如果jq.js中出错,在a/jq.js中是不被察觉的。
2. 后面加入的a/jq.js入口,不影响jq.js入口,所以之前对jq.js的webpack bundle cache是依然生效的。(对比与 一股脑将2个入口重新用一个webpack单元处理)

支持自定义loaders,在工作目录下命名文件 gojs.jsloader.js
默认loader为:

module.exports = [
  {
    test: /.jsx?$/,
    loader: "babel-loader",
    include: [
      // root
    ],
    query: {
      cacheDirectory: true,
      presets: [
        require.resolve("babel-preset-es2015"),
        require.resolve("babel-preset-react"),
        require.resolve("babel-preset-stage-0")
      ],
      plugins: [
        require.resolve("babel-plugin-transform-decorators-legacy"),
      ]
    }
  },

  {
    test: /.css$/,
    exclude: [
      /.mod.css/,
      /.use(able)?.css/
    ],
    loaders: [
      "style-loader",
      "css-loader?localIdentName=[path][name]__[local]___[hash:base64:5]",
      "autoprefixer?browsers=last 2 version&remove=false"
    ]
  },

  {
    test: /.use(able)?.css$/,
    loaders: [
      "style-loader/useable",
      "css-loader?localIdentName=[path][name]__[local]___[hash:base64:5]",
      "autoprefixer?browsers=last 2 version&remove=false"
    ]
  },

  {
    test: /.mod.css$/,
    loaders: [
      "style-loader",
      "css-loader?modules&localIdentName=[path][name]__[local]___[hash:base64:5]",
      "autoprefixer?browsers=last 2 version&remove=false"
    ]
  },

  // .less, .mod.less, .useable.less
  {
    test: /.less$/,
    exclude: [
      /.mod.less$/,
      /.use(able)?.less$/
    ],
    loaders: [
      "style-loader",
      "css-loader?localIdentName=[path][name]__[local]___[hash:base64:5]",
      "autoprefixer?browsers=last 2 version&remove=false",
      "less-loader"
    ]
  },

  {
    test: /.use(able)?.less$/,
    loaders: [
      "style-loader/useable",
      "css-loader?localIdentName=[path][name]__[local]___[hash:base64:5]",
      "autoprefixer?browsers=last 2 version&remove=false",
      "less-loader"
    ]
  },

  {
    test: /.mod.less$/,
    loaders: [
      "style-loader",
      "css-loader?modules&localIdentName=[path][name]__[local]___[hash:base64:5]",
      "autoprefixer?browsers=last 2 version&remove=false",
      "less-loader"
    ]
  },

  // 其他资源
  {
    test: /.(jpeg|jpg|png|gif)$/,
    loader: "url-loader?limit=10240"
  },
  {
    test: /.html$/,
    loader: "html-loader"
  },
  {
    test: /.json$/, loader: "json-loader"
  },
  {
    test: /.woff(?.+)?$/, loader: "url?limit=10000&mimetype=application/font-woff"
  },
  {
    test: /.woff2(?.+)?$/, loader: "url?limit=10000&mimetype=application/font-woff"
  },
  {
    test: /.ttf(?.+)?$/, loader: "url?limit=10000&mimetype=application/octet-stream"
  },
  {
    test: /.eot(?.+)?$/, loader: "file"
  },
  {
    test: /.svg(?.+)?$/, loader: "url?limit=10000&mimetype=image/svg+xml"
  }
]

适用于

适用于一些小型项目或者demo的快速搭建开发。
只需要执行gojs,就可以直接看到demo啦!

预览

效果预览(爱奇艺)

效果预览(Youtube)

最后,欢迎各位 star!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/90625.html

相关文章

  • 告别webpack react 搭建多页面之痛

    摘要:搭建多页面应用在往下看之前请确保先上个凉的吃着目录结构编译结果配置文件脚本存放处项目开发中一些常用的方法主要存放和请求有关的静态文件模版文件项目开发中一些常用的方法其实我觉得可以和放在一块,但是个人习惯还是分开啦开始撸代码如何创建多页面应用 webpack4 搭建 react 多页面应用 在往下看之前请确保nodejs > 8.X 先上个凉的吃着 目录结构 . ├── dist ...

    seanHai 评论0 收藏0
  • Byemess-基于React&redux在线Todo应用

    摘要:在线注册账号,数据存储于。年了,还不使用的异步控制体系。过度对数据模型进行装饰的结果便是高耦合,这跟我初衷是基于在线存储数据有关。 为什么又是Todo,全世界的初学者都在做todo吗?可能很多人要问这句话,其实这句话可以等同于: 为什么你做了个云音乐播放器? 为什么你做了个新闻阅读APP? 为什么你做了个VUE/REACT版本的CNODE? 究其本质,这几个应用都是data-map...

    MRZYD 评论0 收藏0
  • 手摸手,带你用vue后台 系列五(v4.0新版本)

    摘要:同时增加了单元测试,使用了,增加了可视化配置权限,增加了自定义布局等等,优化了原先的权限方案,支持不刷新页面更新路由等等功能。虽然它的初衷是为了单元测试的,但正好满足了我们的需求。它会重写浏览器的对象,从而才能拦截所有请求,代理到本地。 前言 vue-element-admin 从 2017.04.17提交第一个 commit 以来,维护至今已经有两年多的时间了了,发布了四十多个版本,...

    MonoLog 评论0 收藏0
  • 手摸手,带你用vue后台 系列五(v4.0新版本)

    摘要:同时增加了单元测试,使用了,增加了可视化配置权限,增加了自定义布局等等,优化了原先的权限方案,支持不刷新页面更新路由等等功能。虽然它的初衷是为了单元测试的,但正好满足了我们的需求。它会重写浏览器的对象,从而才能拦截所有请求,代理到本地。前言 vue-element-admin 从 2017.04.17提交第一个 commit 以来,维护至今已经有两年多的时间了了,发布了四十多个版本,收获了三...

    graf 评论0 收藏0

发表评论

0条评论

gghyoo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<