trans-loader: webpack-less frontend with service-worker
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
深入Webpack-编写Loader Loader 就像是一个翻译员,能把源文件经过转化后输出新的结果,并且一个文件还可以链式的经过多个翻译员翻译。 以处理 SCSS 文件为例:
-
57
Webpack loader for Kotlin
-
62
系列作者:肖磊 GitHub: github.com/CommanderXL 本篇来分析下 webpack loader 详细的分析部分,由于涉及内容比较多,所以总共分成三篇文章来分析: loader 的基本配置以及匹配规则 loader 的解析执行详解
-
59
文章首发于个人github blog: Biu-blog ,欢迎大家关注~ Webpack loader 详解 loader 的配置 Webpack 对于一个 module 所使用的 loader 对开发者...
-
41
文章首发于个人github blog: Biu-blog ,欢迎大家关注~ Webpack 系列文章: Webpack Load...
-
45
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
最近看一下webpack相关的内容,谈一下如何编写loader和plugin 01 前言 相信大家对webpack也有一定的了解,其实深入浅出we...
-
6
一、初识Webpack webpack 是一个现代 JavaScript 应用程序的
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK