如何在 Django 中使用节点模块?

eri*_*kvm 6 django django-static django-staticfiles

我希望在我的 django 项目中使用 date-fns,但不完全确定如何继续 - 我不能依赖 CDN,需要以某种方式安装它。我已经npm init在我的根文件夹中运行,然后是npm install date-fns. 这生成了一个node_modules文件夹和一个package.json文件。

不完全确定此后如何继续。有哪些必要的步骤?

我只是使用

<script src="{% static 'node_modules/date-fns' %}"></script>
Run Code Online (Sandbox Code Playgroud)

在我的 base.html 文件中?

use*_*881 6

使用模板运算符时使用的搜索路径在( docs )中的文件static中定义。这将允许静态操作员找到库文件并生成 URL。settings.pySTATICFILES_DIR

但请注意,文件仍然需要由 Web 服务器从 . 定义的预期路径提供服务STATIC_URLmanage.py项目根目录中的工具包含一个命令,collectstatic可以将所有静态搜索目录复制到一个位置,以便更简单地提供这些文件。

另请注意,您展示了一个代码示例,该示例从 script 标记引用 npm 库目录作为脚本,但浏览器不知道如何从该目录查找脚本。node通常使用库package.json来查找入口点。有必要专门调用包内感兴趣的脚本文件。

一种选择是使用 webpack 或 rollup 等捆绑工具将所有资源收集到一个位置。

另一种选择是将 node_modules 路径添加到静态路径,可能带有前缀。它可能看起来像下面这样。

STATIC_URL = '/static/'
STATIC_ROOT = 'dist/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
    # This defines a prefix so the url paths will become `/static/node_modules/...`
    ('node_modules', os.path.join(BASE_DIR, 'node_modules/')),
)
Run Code Online (Sandbox Code Playgroud)

特别包括index.js模板文件中的 date-fns,而不仅仅是模板文件中的 date-fns。

{% load static %}
<!-- .... -->
<script src="{% static 'node_modules/date-fns/index.js' %}"></script>

Run Code Online (Sandbox Code Playgroud)

STATIC_ROOT如果通过以下命令收集和提供静态文件,则会将STATICFILES_DIRS内容(在此示例中)收集到dist/static.

python manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)