考虑为Django前端工程师创建的“我最近的Rails JS开发环境”的探讨

我最近在为前端工程师配置Django的JS开发环境。

简而言之

– 如果是「片手間的JS」,用django-compressor就可以了。
– 如果是「认真地写JS」,就将它作为一个单独的应用程序进行划分(例如SPA等)。
– 给迷茫的前端工程师一些爱的帮助。

※ 这是我个人的观点。

首先

如果被生气了就删除。

我本身是一位考生,闲余时间里会做Rails工程师,更闲余的时间里还会做Django工程师。这只是一个人的胡言乱语。

我认为内容本身非常认真。

Django版本「让我来告诉你我最近基于Rails进行JS开发的环境」。

对于Vanilla Django来说

默认情况下什么都没有,所以需要编写原生的JS / CSS。当进入django.contrib.admin时,可以看到很多繁琐的代码。由于它是Django的官方应用程序,所以似乎不能依赖外部库。

如果使用Rails的话,脚本标签等默认会被插入到layout/application.html.erb中,但是在Django中需要手动添加。当文件数量增多时,可能会变得繁琐。

另外,恐怕没有文件合并和压缩功能。

我试过使用Django Compressor。

安装完django-compressor后,在INSTALLED_APPS和STATICFILES_FINDERS等中添加相应内容,然后添加以下配置。

COMPRESS_PRECOMPILERS = (                                                                                                                                     
    ('text/es6+javascript', 'babel -o {outfile} {infile}'),                                                                                                   
)

以上准备工作已经完成,除了指定type属性以外,只需按照正常的JS语法书写,系统会自动进行适当转换。

在中国翻译为母语中文的话,只需要一个选项:可以选择内联写入或指定外部文件,自由决定。

根据名字,django-compressor可以实现合并和压缩(或许这是其主要功能?)。默认情况下,只有在DEBUG=False时才会进行压缩。

{% load compress %}
{% compress js %}
<script type='text/es6+javascript' src='src.js'></script>
<script type='text/es6+javascript'>
  // hogehoge
</script>
{% endcompress %}

缺少什么?

建筑过程很脆弱。

只需指定命令,因此复杂的事情很难做。除了指定命令外,还可以进行各种细节调整,但相当麻烦。

这并不意味着它是坏的,而是在使用简单咖啡或低咖啡因等时非常方便。

JS的测试应该怎么做呢?

如果想要用ES6编写测试之类的东西,django-compressor完全不会照顾到。

那么怎么办呢:在JavaScript的世界里写JavaScript

放弃在Django的静态文件机制中插入构建过程。

引入Webpack。

我会随意创建一个webpack.config.js。

然而,如果按照通常的方式去执行,跨越应用程序的引用会非常麻烦,所以最好将每个应用程序的static指定为根目录(因为手动执行很繁琐,所以我们可以解析settings.py并创建一个库来将其添加到根目录)。

如果是非公开的应用,可以将构建前的源代码放在static/src目录下,并且将输出文件从存储库中排除掉。而对于要公开的应用,由于需要使用Webpack,所以输出文件也应该包含在存储库中,以强制要使用它的用户。

var webpack = require('webpack');

module.exports = {
  entry: './app/static/src/app.js',
  output: {
    path: './app/static/'),
    filename: 'bundle.js',
  },
  resolve: {
    root: [
      './app1/static/src',
      './app2/static/src',
    ],
  },

当需要使用Karma之类的工具时,与Webpack相同,只需注意文件夹并编写配置文件。

将前端代码从其他应用程序中分离出来

即使按照这些步骤执行,由于JS代码被分散到各个应用程序中,对于前端工程师来说可能会感到困难。

在这种情况下,可以新建一个名为frontend的应用程序,并将其分离出来。然后将该应用程序视为单个项目,在frontend目录下放置package.json等文件。

通过这样做,几乎可以完全将后端和前端分离,使每个人都能变得幸福。

当然,前端项目也采用了Django的机制,所以可以轻松地在服务器端渲染 Angular 的部分模板。

需要注意的是,将构建文件的输出目录设置为静态目录。除此之外,可以非常自由地进行任何操作。

总结

我認為以開頭所提出來的觀點作結可能是不錯的。

– 如果只是「快速编程的JavaScript」,那么使用django-compressor就足够了。
– 如果是「认真编写JavaScript」,那么就切分为单个应用程序(例如SPA等)。
– 给迷茫的前端工程师以爱的帮助。

由于Django比Rails的自由度高得多,因此可能有更多不同的方法。

由于我个人和Python/Django领域的交流不太多,所以我在这里写的内容更多地融入了Rails领域(更确切地说是@izumin5210的经验)。

如果能得到很多挑剔,我会感到非常高兴。

特别感谢

    • フロントエンドエンジニアのための「俺の最近のRailsのJS開発環境」を考察する – Qiita

 

    俺の最近のRailsのJS開発環境を教えてやる – Qiita

参考资料

    Django Compressor — Django Compressor 1.5 documentation
bannerAds