如何在django-admin小部件中使用npm的模块,而不安装node?

kdfy810k  于 2022-12-14  发布在  Go
关注(0)|答案(1)|浏览(131)

背景
我有一个Django应用,我想为它创建一个管理小部件。这个小部件将以一种特定的方式显示文本(就像一个终端)。这样应用管理员就可以看到从Django精心安排的分析过程中转发的日志(应用是django-twined)。
为此,我想使用类似terminal-kit的东西或其他需要npm install <whatever>的库之一

构建应用程序

应用程序是在docker中构建的,我不希望整个节点堆栈最终出现在我的生产映像中。
我 * 可以 * 使用多阶段Docker构建;因此,在第一阶段从NPM安装节点和一个库,然后在第二阶段从node_modules复制库,但感觉速度不必要地慢。
此外,因为我所做的一切都是使用与django应用程序捆绑在一起的原始js静态资产,我不知道如何导入模块(或者这是否可能)。
问题

  • 我可以在没有节点堆栈的情况下安装npm模块,从而避免处理笨拙的多阶段构建吗?
  • 然后我怎样才能importrequire把那个模块的内容转换成vanilla javascript来用在django小部件中呢?
  • 这在一般情况下是可能的吗?如果它看起来像移动一座山,我会给予,只是拍一个文本区域与等宽字体在那里...但它会很好,如果日志突出显示和颜色处理正确的终端一样的方式。
w46czmvw

w46czmvw1#

我可以在没有节点堆栈的情况下安装npm模块,从而避免处理笨拙的多阶段构建吗?
你可以使用一个dev工具比如Browserify来汇总一个npm包,这可以通过使用类似下面的方法来汇总整个包来完成:

browserify --require terminal-kit

Browserify将解析包并创建一个JS文件,您可以尝试将其加载到浏览器中。这有一些限制,所以我建议您尝试和探索Browserify文档。
然后我如何导入或要求该模块的内容到vanilla javascript中,以便在django小部件中使用?
你可以在后台管理类定义中包含一个Django模板文件引用来实现这一点。在模板中,你需要包含一个html JS source标签,指向你想要加载的JS脚本。Django可以在构建时包含静态文件,你可以在构建时使用它来包含JS文件,然后使用一个本地资源引用来将模板文件指向正确的位置。
这甚至在一般情况下是可能的吗?
一般来说,这是肯定可能的,但YMMV。它归结为复杂的npm包和它到底是试图在浏览器中做什么。
我会逐步执行以下操作:
1.使用Browserify将npm包转换为单个JS文件。
1.创建一个加载本地JS文件的html文件,在浏览器中打开它。
1.打开控制台,看看你希望重现的命令/上下文是否在浏览器中正常工作。你也可以编写另一个普通的JS文件,并将其加载到html文件中进行测试。
1.在Django管理模板/小部件中包含JS文件引用。
1.在使用/显示全局示例化JS脚本的小部件中编写自定义JS代码。
这个策略是基于我的个人经验,我已经成功地遵循了这个策略,希望它是有帮助的。

相关问题