2

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

不完全确定在此之后如何进行。有哪些必要的步骤?

我只是用

<script src="{% static 'node_modules/date-fns' %}"></script>

在我的 base.html 文件中?

4

1 回答 1

1

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

但是请注意,文件仍然需要由 Web 服务器从STATIC_URL. manage.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/')),
)

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

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

STATIC_ROOT如果从以下命令收集和提供静态文件会将STATICFILES_DIRS内容收集到dist/static.

python manage.py collectstatic
于 2021-04-28T09:30:52.987 回答