33

trans-loader: webpack-less frontend with service-worker

 5 years ago
source link: https://www.tuicool.com/articles/hit/FvyiQj2
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

trans-loader

You don't need npm and bundler .

You need just a service-worker script.

What this script does...

  • Transform .js with babel on service-worker
  • Transform .ts and .tsx with typescript on service-worker
  • Load modules from jspm.io and cache them on serviceWorker.

CAUTION!

  • development only . Do not use for production.
  • It works only for modern browser(ES2015+ and ES Modules ready).

How to use

Put dist/sw.js as /sw.js on your app root.

wget https://raw.githubusercontent.com/mizchi/trans-loader/master/dist/sw.js

Rewrite your entry js like below.

Before

<script src="/main.js"></script>

After

<script type=module>
(async () => {
  const run = () => import('/main.js') // your entry js
  if (navigator.serviceWorker.controller) {
    run()
  } else {
    const reg = await navigator.serviceWorker.register("/sw.js");
    await navigator.serviceWorker.ready;
    navigator.serviceWorker.addEventListener('controllerchange', run)
  }
})()
</script>

See working demo

Example 1: Compiled with babel

// /your-entry.js
import React from "react";
import ReactDOM from "react-dom";
ReactDOM.render(<h1>Hello</h1>, document.querySelector(".root"));

Example 2: Load relative file

index.html
sw.js
main.js
components/App.js
// main.js
import React from "react";
import ReactDOM from "react-dom";
import App from "./components/App";
ReactDOM.render(<App />, document.querySelector(".root"));

Example 3: Load typescript

index.html
sw.js
main.js
components/App.tsx
// main.js
import React from "react";
import ReactDOM from "react-dom";
import App from "./components/App.tsx"; // You need extension yet...
ReactDOM.render(<App />, document.querySelector(".root"));

Example 4: Loading with package.json 's version

index.html
sw.js
main.js
package.json

package.json

{
  "dependencies": {
    "react": "16.4.1",
    "react-dom": "16.4.1"
  }
}

Log

trans-loader: Cache https://dev.jspm.io/[email protected]
trans-loader: Cache https://dev.jspm.io/[email protected]

How it works

Rewrite npm module path to dev.jspm.io . See this code

// before
import React from "react";
// after
import React from "https://dev.jspm.io/react";

Advanced: How to build your own trans-loader

Rewrite this babel setting and rebuild this project.

// src/transformWithBabel.js
import { transform } from "@babel/core/lib/transform";
import pluginSyntaxDynamicImport from "@babel/plugin-syntax-dynamic-import";
import flow from "@babel/preset-flow";
import react from "@babel/preset-react";
import rewriteModulePath from "./rewriteModulePath";

export function transformWithBabel(source, filename = "") {
  return transform(source, {
    presets: [flow, react],
    plugins: [
      pluginSyntaxDynamicImport,
      [
        rewriteModulePath,
        {
          filename
        }
      ]
    ]
  }).code;
}

TODO

package.json
.ts

LICENSE

MIT


Recommend

  • 68
    • segmentfault.com 6 years ago
    • Cache

    深入Webpack-编写Loader

    深入Webpack-编写Loader Loader 就像是一个翻译员,能把源文件经过转化后输出新的结果,并且一个文件还可以链式的经过多个翻译员翻译。 以处理 SCSS 文件为例:

  • 57

    Webpack loader for Kotlin

  • 62
    • 掘金 juejin.im 5 years ago
    • Cache

    webpack系列之三loader详解1

    系列作者:肖磊 GitHub: github.com/CommanderXL 本篇来分析下 webpack loader 详细的分析部分,由于涉及内容比较多,所以总共分成三篇文章来分析: loader 的基本配置以及匹配规则 loader 的解析执行详解

  • 59
    • segmentfault.com 5 years ago
    • Cache

    Webpack Loader 高手进阶(一)

    文章首发于个人github blog: Biu-blog ,欢迎大家关注~ Webpack loader 详解 loader 的配置 Webpack 对于一个 module 所使用的 loader 对开发者...

  • 41
    • segmentfault.com 5 years ago
    • Cache

    Webpack Loader 高手进阶(三)

    文章首发于个人github blog: Biu-blog ,欢迎大家关注~ Webpack 系列文章: Webpack Load...

  • 45
    • 掘金 juejin.im 5 years ago
    • Cache

    webpack系列-loader

    loader配置 loader是导出为一个函数的node模块。该函数在loader转换资源的时候调用。给定的函数将调用loader API,并通过this上下文访问。 function loader(source){ return

  • 23

    README.md

  • 34

    对于webpack,一切皆模块。因此,无论什么文件,都需要转换成js可识别模块。你可以理解为,无论什么后缀的文件,都当作js来使用(即使是img、ppt、txt文件等等)。但是直接当作js使用肯定是不行的,需转换为一种能被js理解的方式才能当作js模块来使用—

  • 17
    • blog.alanwu.site 4 years ago
    • Cache

    关于Webpack中Loader与Plugin的实践

    最近看一下webpack相关的内容,谈一下如何编写loader和plugin 01 前言 相信大家对webpack也有一定的了解,其实深入浅出we...

  • 6

    一、初识Webpack webpack  是一个现代 JavaScript 应用程序的

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK