Skip to main content

Bring babel to your django project, transpiling static .jsx files on the fly, without NodeJS require!

Project description

django-babel-transpiling

Bring babel to your django project, transpiling static .jsx files on the fly, without NodeJS require!

Install

pip install django-babel-transpiling

Static files transpiling config

  1. Add babel_transpiling to your django INSTALLED_APPS
  2. Add babel_transpiling.middlewares.StaticFilesTranspilingMiddleware to your django MIDDLEWARE

    note the order

    [
    ...
    'babel_transpiling.middlewares.StaticFilesTranspilingMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    ... 
    ]
    
  3. Config django STATICFILES_STORAGE = 'babel_transpiling.storage.StaticFilesTranspilingStorage'

Global Options

Default options is:

{
    'transpiler': 'npm/@babel/standalone@7.12.15/babel.min.js',
    'extensions': ['.jsx'],
    'options': {
        'plugins': ['transform-import-cssm'],
        "presets": ["react"],
        "generatorOpts": {
            "jsescOption": {
                "minimal": True
            }
        }
    },
    'mimetypes': {
        '.jsx': 'application/javascript'
    },
    'setup': ['npm/babel-plugin-transform-import-cssm@1.0.0/index.standalone.js']
}

You can customize by provide BABEL_TRANSPILING in your django settings, for example, custom babel preset:

BABEL_TRANSPILING = {
    'options': {
        "filename": "index.ts",
        "presets": ["typescript"]
    }
}

Babel API

You can control more by set setup option, for example, write custom plugin and register:

$ cat path/to/setup.js

// Simple plugin that converts every identifier to "LOL"
function lolizer() {
  return {
    visitor: {
      Identifier(path) {
        path.node.name = 'LOL';
      }
    }
  }
}
Babel.registerPlugin('lolizer', lolizer);

Then config options:

BABEL_TRANSPILING = {
    'options': {
        'plugins': ['lolizer']
    },
    'setup': ['path/to/setup.js']
}

Template Support

Sometimes transpiling in your template file is more make sense than static file, you can use transpiling tag to do that.

{% load babel_transpiling %}
...
<script>
    {% transpiling %}
      ReactDOM.render(<App/>, document.querySelector('#root'))
    {% endtranspiling %}
</script> 
...

Template tag also support use custom transpiling option, for example, in context there exists a ts option:

{% transpiling options=ts %}
  const anExampleVariable: string = "Hello World"
  console.log(anExampleVariable)
{% endtranspiling %}

FAQ

  1. Static file not get transpiled

    if you use django runserver command to run server and the setting DEBUG=True, please add --nostatic option to command

  2. I want use other storage

    you should write your own storage to inherit StaticFilesTranspilingStorage

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-babel-transpiling-0.3.2.tar.gz (390.2 kB view details)

Uploaded Source

Built Distribution

django_babel_transpiling-0.3.2-py3-none-any.whl (392.5 kB view details)

Uploaded Python 3

File details

Details for the file django-babel-transpiling-0.3.2.tar.gz.

File metadata

  • Download URL: django-babel-transpiling-0.3.2.tar.gz
  • Upload date:
  • Size: 390.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.6.9

File hashes

Hashes for django-babel-transpiling-0.3.2.tar.gz
Algorithm Hash digest
SHA256 75e0f05e59d7670e2cd40ef35375ae34759130407450a031f01511a28c5d9795
MD5 65c6dedf5e85bd382eb67487ce5f9654
BLAKE2b-256 3d23904135e8f015f44af36298a12be568f80c9faeaac40ea417bf81665a6c81

See more details on using hashes here.

File details

Details for the file django_babel_transpiling-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: django_babel_transpiling-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 392.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/53.0.0 requests-toolbelt/0.9.1 tqdm/4.57.0 CPython/3.6.9

File hashes

Hashes for django_babel_transpiling-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0bd568548e78a32ed63dcf8307acd9e1ca95812a899a58393602f704ec37adaa
MD5 580aaa08503f1124182b5c2595946d01
BLAKE2b-256 49bdc58616698a0772ed6c68c3d2ba4dcf6e15721165361a04121c1de27e5202

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page