@jsenv/core
Holistic likable builder.
Last updated 9 hours ago by dmail .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install @jsenv/core 
SYNC missed versions from official npm registry.

core

Holistic likable builder of JavaScript projects.

github package npm package github ci codecov coverage

Table of contents

Presentation

@jsenv/core was first created to be able to write tests that could be executed in different browsers AND Node.js. In the end it became a tool covering the core needs of a JavaScript project:

  • A test runner to execute test files.
  • A developer friendly environment
  • A builder/bundler to optimize files for production

Jsenv integrates naturally with standard html, css and js. It can be configured to work with TypeScript and React.

Testing

@jsenv/core provides a test runner: A function executing test files to know if some are failing. This function is called executeTestPlan. Check steps below to get an idea of its usage.

<summary>1. Create a test file</summary>

In order to show code unrelated to a specific codebase the example below is testing Math.max. In reality you wouldn't test Math.max.

Math.max.test.js

const actual = Math.max(2, 4)
const expected = 4
if (actual !== expected) {
  throw new Error(`Math.max(2, 4) should return ${expected}, got ${actual}`)
}

Math.max.test.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf8" />
    <link rel="icon" href="data:," />
  </head>
  <body>
    <script type="module" src="./Math.max.test.js"></script>
  </body>
</html>
<summary>2. Create an other file to execute your test</summary>

execute-test-plan.js

import { executeTestPlan, launchChromiumTab, launchFirefoxTab, launchNode } from "@jsenv/core"

executeTestPlan({
  projectDirectoryUrl: new URL("./", import.meta.url),
  testPlan: {
    "**/*.test.html": {
      chromium: {
        launch: launchChromiumTab,
      },
      firefox: {
        launch: launchFirefoxTab,
      },
    },
    "**/*.test.js": {
      node: {
        launchNode,
      },
    },
  },
})

Code above translates into the following sentence: "Execute all files in my project that ends with test.html on Chrome and Firefox AND execute all files that ends with test.js on Node.js"

<summary>3. Execute your tests</summary>

test execution terminal screenshot

Read more on testing documentation

Exploring

@jsenv/core provides a server capable to turn any html file into an entry point. This power can be used to create a storybook, debug a file in isolation and more. This server is called exploring server. This server is designed for development: it provides livereloading out of the box and does not bundle files.

The following example shows how it can be used to execute a single test file. As mentioned previously it can execute any html file, not only test files.

<summary>1. Create a file to start exploring server</summary>
import { startExploring } from "@jsenv/core"

startExploring({
  projectDirectoryUrl: new URL("./", import.meta.url),
  explorableConfig: {
    source: {
      "**/*.html": true,
    },
  },
  compileServerPort: 3456,
})
<summary>2. Start exploring server</summary>

exploring command terminal screenshot

<summary>3. Open exploring server in a browser</summary>

When you open https://localhost:3456 in a browser, a page called jsenv exploring index is shown. It displays a list of all your html files. You can click a file to execute it inside the browser. In our previous example we created Math.max.test.html so it is displayed in that list.

jsenv exploring index page screenshot

Maybe you noticed the black toolbar at the bottom of the page? We'll see that further in the documentation.

<summary>4. Open Math.max.test.html</summary>

Clicking Math.max.test.html load an empty blank page because code inside this html file display nothing and does not throw.

test file page screenshot

To get a better idea of how this would integrate in everyday workflow, let's go a bit further and see what happens if we make test file throw. After that we'll revert the changes.

<summary>5. Make Math.max.test.html fail</summary>
- const expected = 4
+ const expected = 3

The browser page is reloaded and page displays the failure. Jsenv also uses Notification API to display a system notification.

test file failing page screenshot

test file failing notification screenshot

<summary>6. Fix Math.max.test.html</summary>
- const expected = 3
+ const expected = 4

Browser livereloads again and error is gone together with a system notification.

test file page screenshot

test file fixed notification screenshot

Read more exploring documentation

Building

Building can be described as: generating files optimized for production thanks to minification, concatenation and long term caching.

Jsenv only needs to know your main html file and where to write the builded files. You can create a script and execute it with node.

Following the simplified steps below turns index.html into a production optimized dist/main.html.

<summary>1. Create index.html</summary>
<!DOCTYPE html>
<html>
  <head>
    <title>Title</title>
    <meta charset="utf-8" />
    <link rel="icon" href="./favicon.ico" />
    <script type="importmap" src="./import-map.importmap"></script>
    <link rel="stylesheet" type="text/css" href="./main.css" />
  </head>

  <body>
    <script type="module" src="./main.js"></script>
  </body>
</html>

To keep example concise, the content of the following files is not shown:

  • favicon.ico
  • import-map.importmap
  • main.css
  • main.js
<summary>2. Create build-project.js</summary>
import { buildProject } from "@jsenv/core"

await buildProject({
  projectDirectoryUrl: new URL("./", import.meta.url),
  buildDirectoryRelativeUrl: "dist",
  enryPointMap: {
    "./index.html": "./main.html",
  },
  minify: false,
})
<summary>3. Execute build-project.js</summary>
node ./build-project.js
<summary>4. Open dist/index.html</summary>
<!DOCTYPE html>
<html>
  <head>
    <title>Title</title>
    <meta charset="utf-8" />
    <link rel="icon" href="assets/favicon-5340s4789a.ico" />
    <script type="importmap" src="import-map-b237a334.importmap"></script>
    <link rel="stylesheet" type="text/css" href="assets/main-3b329ff0.css" />
  </head>

  <body>
    <script type="module" src="./main-f7379e10.js"></script>
  </body>
</html>

To keep example concise, the content of the following files is not shown:

  • dist/assets/favicon-5340s4789a.ico
  • dist/import-map-b237a334.importmap
  • dist/assets/main-3b329ff0.css
  • dist/main-f7379e10.js

Read more building documentation

Features

Jsenv focuses on one thing: developer experience. Everything was carefully crafted to get explicit and coherent apis. This section list most important features provided by jsenv. Click them to get more details.

<summary>Dispensable by default</summary>

Jsenv is dispensable by default. As long as your code is using only standards, you could remove jsenv from your project and still be able to run your code. You can double click your html file to open it inside your browser -> it works. Or if this is a Node.js file execute it directly using the node command.

Being dispensable by default highlights jsenv philosophy: no new concept to learn. It also means you can switch to an other tool easily as no part of your code is specific to jsenv.

<summary>Explicitness over magic</summary>

Jsenv also don't like blackboxes. @jsenv/core functions always choose expliciteness over magic. It makes things much simpler to understand and follow both for jsenv and for you.

One example of expliciteness over magic: You control and tell jsenv where is your project directory. Jsenv don't try to guess or assume where it is.

<summary>Less context switching</summary>

Context switching happens when you are in context A and switch to context B. The more context A differ from context B, the harder it is to switch.

Some example where context switching occurs:

  • switching from a regular file to a unit test file
  • switching from a file written for web browsers to file written for Node.js

With jsenv context switching almost vanishes because:

  • exploring provides a unified experience regardless of the file being executed (unit test, web page, reduced test case, experimentation, ...)
  • testing and building are both capable to handle files written for browsers and/or Node.js

Less context switching saves lot of energy making a project codebase faster to write and easier to maintain.

<summary>Import maps</summary>

This proposal allows control over what URLs get fetched by JavaScript import statements and import() expressions. This allows "bare import specifiers", such as import moment from "moment", to work.

— Domenic Denicola in WICG/import-maps

Jsenv supports import maps out of the box. The following html can be used with jsenv:

<!DOCTYPE html>
<html>
  <head>
    <title>Title</title>
    <meta charset="utf-8" />
    <script type="importmap" src="./project.importmap"></script>
  </head>

  <body>
    <script type="module">
      import moment from "moment"
      console.log(moment)
    </script>
  </body>
</html>
<summary>Top level await</summary>

Top-Level await has moved to stage 3, so the answer to your question How can I use async/await at the top level? is to just add await the call to main()

— Taro in How can I use async/await at the top level?

Jsenv supports top level await out of the box. Top level await allow jsenv to know when a file code is done executing. This is used to kill a file that is too long to execute and know when to collect code coverage.

<summary>Dynamic import</summary>

The lazy-loading capabilities enabled by dynamic import() can be quite powerful when applied correctly. For demonstration purposes, Addy modified an example Hacker News PWA that statically imported all its dependencies, including comments, on first load. The updated version uses dynamic import() to lazily load the comments, avoiding the load, parse, and compile cost until the user really needs them.

— Mathias Bynens on Dynamic import()

Dynamic import are supported by jsenv. When building project using buildProject, dynamic import are turned into separate chunks.

<summary>import.meta.url</summary>

It's a proposal to add the ability for ES modules to figure out what their file name or full path is. This behaves similarly to __dirname in Node which prints out the file path to the current module. According to caniuse, most browsers already support it (including the latest Chromium Edge)

— Jake Deichert on A Super Hacky Alternative to import.meta.url

Jsenv supports import.meta.url.

<summary>Asset reference by url</summary>

A common pattern to reference an asset is to use an import statement. This import would actually return an url to the asset.

import imageUrl from "./img.png"

As it's not standard, it doesn't work in the browser without transformation. However, import.meta.url does work in the browser.

const imageUrl = new URL("./img.png", import.meta.url)

You can use both patterns to reference an asset but prefer the one relying on import.meta.url.

<summary>import.meta.dev</summary>

A common pattern to write code specific to dev environment consists into using process.env.NODE_ENV and rely on dead code elimination provided by tree shaking.

if (process.env.NODE_ENV !== "production") {
  console.log("log visible only in dev")
}

Is transformed, when building for production, into a false constant and eliminated by tree shaking.

if (false) {
  console.log("log visible only in dev")
}

But process.env.NODE_ENV is specific to Node.js. It would not work in a browser without transformation. Using import.meta.dev it's possible to write something browser can understand.

if (import.meta.dev) {
  console.log("log visible only in dev")
}

The list above is non exaustive, there is more like long term caching, livereload without configuration, service workers, ...

Installation

npm install --save-dev @jsenv/core

@jsenv/core is tested on Mac, Windows, Linux on Node.js 14.5.0. Other operating systems and Node.js versions are not tested.

Configuration

Jsenv can execute standard JavaScript and be configured to run non-standard JavaScript.

Standard corresponds to JavaScript Modules, destructuring, optional chaining and so on.

Non-standard corresponds to CommonJS modules, JSX or TypeScript.

Keep in mind one of your dependency may use non-standard JavaScript. For instance react uses CommonJS modules.

jsenv.config.js

We recommend to regroup configuration in a jsenv.config.js file at the root of your working directory.

To get a better idea see jsenv.config.js. The file can be imported and passed using the spread operator. This technic helps to see jsenv custom configuration quickly and share it between files.

<summary>Example of jsenv config passed using spread operator</summary>

screenshot about jsenv config import and spread operator

— See script/test/test.js

That being said it's only a recommendation. There is nothing enforcing or checking the presence of jsenv.config.js.

CommonJS

CommonJS module format rely on module.exports and require. It was invented by Node.js and is not standard JavaScript. If your code or one of your dependency uses it, it requires some configuration.

<summary> jsenv.config.js to use code written in CommonJS</summary>
import { jsenvBabelPluginMap, convertCommonJsWithRollup } from "@jsenv/core"

export const convertMap = {
  "./node_modules/whatever/index.js": convertCommonJsWithRollup,
}

jsenv.config.js above makes jsenv compatible with a package named whatever that would be written in CommonJS.

React

React is written in CommonJS and comes with JSX. If you use them it requires some configuration.

<summary> jsenv.config.js for react and jsx</summary>
import { createRequire } from "module"
import { jsenvBabelPluginMap, convertCommonJsWithRollup } from "@jsenv/core"

const require = createRequire(import.meta.url)
const transformReactJSX = require("@babel/plugin-transform-react-jsx")

export const babelPluginMap = {
  ...jsenvBabelPluginMap,
  "transform-react-jsx": [
    transformReactJSX,
    { pragma: "React.createElement", pragmaFrag: "React.Fragment" },
  ],
}

export const convertMap = {
  "./node_modules/react/index.js": convertCommonJsWithRollup,
  "./node_modules/react-dom/index.js": (options) => {
    return convertCommonJsWithRollup({ ...options, external: ["react"] })
  },
}

See also

TypeScript

TypeScript needs some configuration if you use it.

<summary> jsenv.config.js for TypeScript</summary>
import { createRequire } from "module"
import { jsenvBabelPluginMap } from "@jsenv/core"

const require = createRequire(import.meta.url)
const transformTypeScript = require("@babel/plugin-transform-typescript")

export const babelPluginMap = {
  ...jsenvBabelPluginMap,
  "transform-typescript": [transformTypeScript, { allowNamespaces: true }],
}

See also

About

Main dependencies

An overview of the main dependencies used by @jsenv/core.

Dependency How it is used by jsenv
systemjs "Polyfill" js modules, import maps and more
playwright Launch Chromium, Firefox and WebKit
istanbul Collect and generate code coverage
rollup Tree shaking when building
babel Parse and transform js
parse5 Parse and transform html
postCSS Parse and transform css

Name

The name jsenv stands for JavaScript environments. This is because the original purpose of jsenv was to bring closer two JavaScript runtimes: web browsers and Node.js. This aspect of jsenv is not highlighted in the documentation but it exists.

Maybe jsenv should be written JSEnv? It's too boring to hold shift on keyboard while typing JSE, then release shift, then type nv, so it's a no.

Logo

The logo is composed by the name at the center and two circles orbiting around it. One of the circle is web browsers, the other is Node.js. It represents the two JavaScript environments supported by jsenv.

jsenv logo with legend

<summary>Jsenv logo origin explained</summary>

jsenv logo origin explained

Warning: This is a joke

See also

Current Tags

  • 17.9.0                                ...           latest (9 hours ago)

380 Versions

  • 17.9.0                                ...           9 hours ago
  • 17.8.2                                ...           5 days ago
  • 17.8.1                                ...           15 days ago
  • 17.8.0                                ...           15 days ago
  • 17.7.0                                ...           16 days ago
  • 17.7.0-alpha.0                                ...           16 days ago
  • 17.6.0                                ...           18 days ago
  • 17.5.0                                ...           25 days ago
  • 17.4.1                                ...           a month ago
  • 17.4.0                                ...           a month ago
  • 17.3.2                                ...           a month ago
  • 17.3.1                                ...           a month ago
  • 17.3.0                                ...           a month ago
  • 17.2.0                                ...           a month ago
  • 17.1.8                                ...           a month ago
  • 17.1.7                                ...           a month ago
  • 17.1.6                                ...           a month ago
  • 17.1.5                                ...           a month ago
  • 17.1.4                                ...           a month ago
  • 17.1.2                                ...           a month ago
  • 17.1.1                                ...           a month ago
  • 17.1.0                                ...           a month ago
  • 17.1.0-alpha.4                                ...           a month ago
  • 17.1.0-alpha.3                                ...           a month ago
  • 17.1.0-alpha.2                                ...           a month ago
  • 17.1.0-alpha.1                                ...           a month ago
  • 17.1.0-alpha.0                                ...           2 months ago
  • 17.0.1                                ...           2 months ago
  • 17.0.0                                ...           2 months ago
  • 16.8.0                                ...           2 months ago
  • 16.7.3                                ...           2 months ago
  • 16.7.2                                ...           2 months ago
  • 16.7.1                                ...           2 months ago
  • 16.7.0                                ...           2 months ago
  • 16.6.0                                ...           2 months ago
  • 16.5.1                                ...           2 months ago
  • 16.5.0                                ...           3 months ago
  • 16.4.0                                ...           3 months ago
  • 16.4.0-alpha.0                                ...           3 months ago
  • 16.3.6                                ...           3 months ago
  • 16.3.5                                ...           3 months ago
  • 16.3.4                                ...           3 months ago
  • 16.3.3                                ...           3 months ago
  • 16.3.2                                ...           3 months ago
  • 16.3.1                                ...           3 months ago
  • 16.3.0                                ...           3 months ago
  • 16.3.0-alpha.0                                ...           3 months ago
  • 16.2.5                                ...           3 months ago
  • 16.2.5-alpha.0                                ...           3 months ago
  • 16.2.4                                ...           3 months ago
  • 16.2.3                                ...           3 months ago
  • 16.2.1                                ...           3 months ago
  • 16.2.0                                ...           3 months ago
  • 16.1.0                                ...           3 months ago
  • 16.0.0                                ...           3 months ago
  • 16.0.0-alpha.4                                ...           3 months ago
  • 16.0.0-alpha.3                                ...           3 months ago
  • 16.0.0-alpha.2                                ...           3 months ago
  • 16.0.0-alpha.1                                ...           3 months ago
  • 16.0.0-alpha.0                                ...           3 months ago
  • 15.1.0                                ...           4 months ago
  • 15.1.0-alpha.3                                ...           4 months ago
  • 15.1.0-alpha.2                                ...           4 months ago
  • 15.1.0-alpha.1                                ...           4 months ago
  • 15.1.0-alpha.0                                ...           4 months ago
  • 15.0.3                                ...           4 months ago
  • 15.0.2                                ...           4 months ago
  • 15.0.1                                ...           4 months ago
  • 15.0.0                                ...           4 months ago
  • 15.0.0-beta.0                                ...           4 months ago
  • 15.0.0-alpha.1                                ...           4 months ago
  • 15.0.0-alpha.0                                ...           4 months ago
  • 14.2.1                                ...           5 months ago
  • 14.2.0                                ...           5 months ago
  • 14.1.0                                ...           5 months ago
  • 14.1.0-alpha.1                                ...           5 months ago
  • 14.0.0                                ...           6 months ago
  • 14.0.0-alpha.15                                ...           6 months ago
  • 14.0.0-alpha.14                                ...           6 months ago
  • 14.0.0-alpha.13                                ...           6 months ago
  • 14.0.0-alpha.12                                ...           6 months ago
  • 14.0.0-alpha.11                                ...           6 months ago
  • 14.0.0-alpha.10                                ...           6 months ago
  • 14.0.0-alpha.9                                ...           6 months ago
  • 14.0.0-alpha.8                                ...           6 months ago
  • 14.0.0-alpha.7                                ...           6 months ago
  • 14.0.0-alpha.6                                ...           6 months ago
  • 14.0.0-alpha.5                                ...           6 months ago
  • 14.0.0-alpha.4                                ...           6 months ago
  • 14.0.0-alpha.3                                ...           6 months ago
  • 14.0.0-alpha.2                                ...           6 months ago
  • 14.0.0-alpha.1                                ...           6 months ago
  • 13.4.1                                ...           7 months ago
  • 13.4.0                                ...           7 months ago
  • 13.3.3                                ...           7 months ago
  • 13.3.2                                ...           7 months ago
  • 13.3.1                                ...           7 months ago
  • 13.3.0                                ...           7 months ago
  • 13.1.6                                ...           8 months ago
  • 13.1.5                                ...           8 months ago
  • 13.1.4                                ...           8 months ago
  • 13.1.3                                ...           8 months ago
  • 13.1.2                                ...           8 months ago
  • 13.1.0                                ...           8 months ago
  • 13.0.5                                ...           8 months ago
  • 13.0.4                                ...           8 months ago
  • 13.0.3                                ...           8 months ago
  • 13.0.2                                ...           8 months ago
  • 13.0.1                                ...           8 months ago
  • 13.0.0                                ...           8 months ago
  • 13.0.0-alpha.4                                ...           8 months ago
  • 13.0.0-alpha.3                                ...           8 months ago
  • 13.0.0-alpha.2                                ...           8 months ago
  • 13.0.0-alpha.1                                ...           8 months ago
  • 13.0.0-alpha.0                                ...           8 months ago
  • 12.4.3                                ...           9 months ago
  • 12.4.2                                ...           9 months ago
  • 12.4.1                                ...           9 months ago
  • 12.4.0                                ...           9 months ago
  • 12.3.4                                ...           9 months ago
  • 12.3.3                                ...           9 months ago
  • 12.3.2                                ...           9 months ago
  • 12.3.1                                ...           9 months ago
  • 12.3.0                                ...           10 months ago
  • 12.2.2                                ...           10 months ago
  • 12.2.1                                ...           10 months ago
  • 12.2.0                                ...           10 months ago
  • 12.1.1                                ...           10 months ago
  • 12.1.0                                ...           10 months ago
  • 12.1.0-alpha.6                                ...           10 months ago
  • 12.1.0-alpha.5                                ...           10 months ago
  • 12.1.0-alpha.4                                ...           10 months ago
  • 12.1.0-alpha.3                                ...           10 months ago
  • 12.1.0-alpha.2                                ...           10 months ago
  • 12.1.0-alpha.1                                ...           10 months ago
  • 12.0.6                                ...           a year ago
  • 12.0.5                                ...           a year ago
  • 12.0.4-alpha.0                                ...           a year ago
  • 12.0.1                                ...           a year ago
  • 12.0.0                                ...           a year ago
  • 11.9.2                                ...           a year ago
  • 11.9.2-alpha.0                                ...           a year ago
  • 11.9.1                                ...           a year ago
  • 11.9.0                                ...           a year ago
  • 11.8.0                                ...           a year ago
  • 11.7.1                                ...           a year ago
  • 11.7.0                                ...           a year ago
  • 11.6.1                                ...           a year ago
  • 11.6.0                                ...           a year ago
  • 11.5.0                                ...           a year ago
  • 11.4.1                                ...           a year ago
  • 11.4.0                                ...           a year ago
  • 11.2.4                                ...           a year ago
  • 11.2.3                                ...           a year ago
  • 11.2.2                                ...           a year ago
  • 11.2.1                                ...           a year ago
  • 11.2.1-alpha.1                                ...           a year ago
  • 11.2.0                                ...           a year ago
  • 11.1.0                                ...           a year ago
  • 11.0.1                                ...           a year ago
  • 11.0.0                                ...           a year ago
  • 10.6.0-alpha.0                                ...           a year ago
  • 10.5.1                                ...           a year ago
  • 10.5.0                                ...           a year ago
  • 10.4.0                                ...           a year ago
  • 10.3.3                                ...           a year ago
  • 10.3.2                                ...           a year ago
  • 10.2.1                                ...           a year ago
  • 10.3.1                                ...           a year ago
  • 10.3.0                                ...           a year ago
  • 10.2.0                                ...           a year ago
  • 10.1.0                                ...           a year ago
  • 10.0.0                                ...           a year ago
  • 10.0.0-alpha.11                                ...           a year ago
  • 10.0.0-alpha.10                                ...           a year ago
  • 10.0.0-alpha.9                                ...           a year ago
  • 10.0.0-alpha.8                                ...           a year ago
  • 10.0.0-alpha.7                                ...           a year ago
  • 10.0.0-alpha.5                                ...           a year ago
  • 10.0.0-alpha.3                                ...           a year ago
  • 10.0.0-alpha.2                                ...           a year ago
  • 10.0.0-alpha                                ...           a year ago
  • 9.5.0                                ...           a year ago
  • 9.4.0                                ...           a year ago
  • 9.3.0                                ...           a year ago
  • 9.2.0                                ...           a year ago
  • 9.1.0                                ...           a year ago
  • 9.0.0                                ...           a year ago
  • 8.21.0                                ...           a year ago
  • 8.20.0                                ...           a year ago
  • 8.19.0                                ...           a year ago
  • 8.18.0                                ...           a year ago
  • 8.17.0                                ...           a year ago
  • 8.16.0                                ...           a year ago
  • 8.15.0                                ...           a year ago
  • 8.14.0                                ...           a year ago
  • 8.13.0                                ...           a year ago
  • 8.12.0                                ...           a year ago
  • 8.11.0                                ...           a year ago
  • 8.10.0                                ...           a year ago
  • 8.9.0                                ...           a year ago
  • 8.8.0                                ...           a year ago
  • 8.7.0                                ...           a year ago
  • 8.6.0                                ...           a year ago
  • 8.5.0                                ...           a year ago
  • 8.4.0                                ...           a year ago
  • 8.3.0                                ...           a year ago
  • 8.2.0                                ...           a year ago
  • 8.1.0                                ...           a year ago
  • 8.0.0                                ...           a year ago
  • 7.8.0                                ...           a year ago
  • 7.7.0                                ...           a year ago
  • 7.6.0                                ...           a year ago
  • 7.5.0                                ...           a year ago
  • 7.4.0                                ...           a year ago
  • 7.3.0                                ...           a year ago
  • 7.2.0                                ...           a year ago
  • 7.1.0                                ...           a year ago
  • 7.0.0                                ...           a year ago
  • 6.3.0                                ...           a year ago
  • 6.2.0                                ...           a year ago
  • 6.1.0                                ...           a year ago
  • 6.0.0                                ...           a year ago
  • 5.142.0                                ...           a year ago
  • 5.141.0                                ...           a year ago
  • 5.140.0                                ...           a year ago
  • 5.139.0                                ...           a year ago
  • 5.138.0                                ...           a year ago
  • 5.137.0                                ...           a year ago
  • 5.136.0                                ...           a year ago
  • 5.135.0                                ...           a year ago
  • 5.134.0                                ...           a year ago
  • 5.133.0                                ...           a year ago
  • 5.132.0                                ...           a year ago
  • 5.131.0                                ...           a year ago
  • 5.130.0                                ...           a year ago
  • 5.129.0                                ...           a year ago
  • 5.128.0                                ...           a year ago
  • 5.127.0                                ...           a year ago
  • 5.126.0                                ...           a year ago
  • 5.125.0                                ...           a year ago
  • 5.124.0                                ...           a year ago
  • 5.123.0                                ...           a year ago
  • 5.122.0                                ...           a year ago
  • 5.121.0                                ...           a year ago
  • 5.120.0                                ...           a year ago
  • 5.119.0                                ...           a year ago
  • 5.118.0                                ...           a year ago
  • 5.117.0                                ...           a year ago
  • 5.116.0                                ...           a year ago
  • 5.115.0                                ...           a year ago
  • 5.114.0                                ...           a year ago
  • 5.113.0                                ...           a year ago
  • 5.112.0                                ...           2 years ago
  • 5.111.0                                ...           2 years ago
  • 5.110.0                                ...           2 years ago
  • 5.109.0                                ...           2 years ago
  • 5.108.0                                ...           2 years ago
  • 5.107.0                                ...           2 years ago
  • 5.106.0                                ...           2 years ago
  • 5.105.0                                ...           2 years ago
  • 5.104.0                                ...           2 years ago
  • 5.103.0                                ...           2 years ago
  • 5.102.0                                ...           2 years ago
  • 5.101.0                                ...           2 years ago
  • 5.100.0                                ...           2 years ago
  • 5.99.0                                ...           2 years ago
  • 5.98.0                                ...           2 years ago
  • 5.97.0                                ...           2 years ago
  • 5.96.0                                ...           2 years ago
  • 5.95.0                                ...           2 years ago
  • 5.94.0                                ...           2 years ago
  • 5.93.0                                ...           2 years ago
  • 5.92.0                                ...           2 years ago
  • 5.91.0                                ...           2 years ago
  • 5.90.0                                ...           2 years ago
  • 5.89.0                                ...           2 years ago
  • 5.88.0                                ...           2 years ago
  • 5.87.0                                ...           2 years ago
  • 5.86.0                                ...           2 years ago
  • 5.85.0                                ...           2 years ago
  • 5.84.0                                ...           2 years ago
  • 5.83.0                                ...           2 years ago
  • 5.82.0                                ...           2 years ago
  • 5.81.0                                ...           2 years ago
  • 5.80.0                                ...           2 years ago
  • 5.79.0                                ...           2 years ago
  • 5.78.0                                ...           2 years ago
  • 5.77.0                                ...           2 years ago
  • 5.76.0                                ...           2 years ago
  • 5.75.0                                ...           2 years ago
  • 5.74.0                                ...           2 years ago
  • 5.73.0                                ...           2 years ago
  • 5.72.0                                ...           2 years ago
  • 5.71.0                                ...           2 years ago
  • 5.70.0                                ...           2 years ago
  • 5.69.0                                ...           2 years ago
  • 5.68.0                                ...           2 years ago
  • 5.67.0                                ...           2 years ago
  • 5.66.0                                ...           2 years ago
  • 5.65.0                                ...           2 years ago
  • 5.64.0                                ...           2 years ago
  • 5.63.0                                ...           2 years ago
  • 5.62.0                                ...           2 years ago
  • 5.61.0                                ...           2 years ago
  • 5.60.0                                ...           2 years ago
  • 5.59.0                                ...           2 years ago
  • 5.58.0                                ...           2 years ago
  • 5.57.0                                ...           2 years ago
  • 5.55.0                                ...           2 years ago
  • 5.54.0                                ...           2 years ago
  • 5.53.0                                ...           2 years ago
  • 5.52.0                                ...           2 years ago
  • 5.51.0                                ...           2 years ago
  • 5.50.0                                ...           2 years ago
  • 5.49.0                                ...           2 years ago
  • 5.48.0                                ...           2 years ago
  • 5.47.0                                ...           2 years ago
  • 5.46.0                                ...           2 years ago
  • 5.44.0                                ...           2 years ago
  • 5.45.0                                ...           2 years ago
  • 5.43.0                                ...           2 years ago
  • 5.42.0                                ...           2 years ago
  • 5.41.0                                ...           2 years ago
  • 5.40.0                                ...           2 years ago
  • 5.39.0                                ...           2 years ago
  • 5.38.0                                ...           2 years ago
  • 5.37.0                                ...           2 years ago
  • 5.36.0                                ...           2 years ago
  • 5.35.0                                ...           2 years ago
  • 5.34.0                                ...           2 years ago
  • 5.33.0                                ...           2 years ago
  • 5.32.0                                ...           2 years ago
  • 5.31.0                                ...           2 years ago
  • 5.30.0                                ...           2 years ago
  • 5.29.0                                ...           2 years ago
  • 5.28.0                                ...           2 years ago
  • 5.27.0                                ...           2 years ago
  • 5.26.0                                ...           2 years ago
  • 5.25.0                                ...           2 years ago
  • 5.24.0                                ...           2 years ago
  • 5.23.0                                ...           2 years ago
  • 5.22.0                                ...           2 years ago
  • 5.21.0                                ...           2 years ago
  • 5.20.0                                ...           2 years ago
  • 5.19.0                                ...           2 years ago
  • 5.18.0                                ...           2 years ago
  • 5.17.0                                ...           2 years ago
  • 5.16.0                                ...           2 years ago
  • 5.15.0                                ...           2 years ago
  • 5.14.0                                ...           2 years ago
  • 5.12.0                                ...           2 years ago
  • 5.11.0                                ...           2 years ago
  • 5.10.0                                ...           2 years ago
  • 5.8.0                                ...           2 years ago
  • 5.7.0                                ...           2 years ago
  • 5.6.0                                ...           2 years ago
  • 5.5.0                                ...           2 years ago
  • 5.4.0                                ...           2 years ago
  • 5.3.0                                ...           2 years ago
  • 5.2.0                                ...           2 years ago
  • 5.1.0                                ...           2 years ago
  • 5.0.0                                ...           2 years ago
  • 4.16.0                                ...           2 years ago
  • 4.15.0                                ...           2 years ago
  • 4.14.0                                ...           2 years ago
  • 4.13.0                                ...           2 years ago
  • 4.12.0                                ...           2 years ago
  • 4.10.0                                ...           2 years ago
  • 4.9.0                                ...           2 years ago
  • 4.8.0                                ...           2 years ago
  • 4.7.0                                ...           2 years ago
  • 4.6.0                                ...           2 years ago
  • 4.5.0                                ...           2 years ago
  • 4.4.0                                ...           2 years ago
  • 4.2.0                                ...           2 years ago
  • 4.0.0                                ...           2 years ago
  • 3.0.0                                ...           2 years ago
  • 2.0.0                                ...           2 years ago
  • 1.0.0                                ...           2 years ago
Maintainers (2)
Downloads
Today 18
This Week 18
This Month 214
Last Day 0
Last Week 37
Last Month 691
Dependencies (84)

Copyright 2014 - 2017 © taobao.org |