如何用 Docker 覆盖超集 javascript 文件?

How does one overwrite a superset javascript file with Docker?

当我在我的 Dockerfile 中使用 COPY 命令覆盖特定文件时(在这种情况下,我试图在保存时更改 SQLAlchemy 编辑器中的警报,只是我要执行的更改之一),更改在代码和 docker 容器 shell 中可见,但在我 运行 代码中不显示。

在 docker 文件中,我在 docker 文件中已有的 运行 命令之前添加了复制命令行。

...
COPY actions.js /usr/local/lib/python3.6/site-packages/superset/static/assets/src/SqlLab/actions.js
RUN chmod +x /superset-init.sh

我尝试复制的文件本身根据需要放置在与 Dockerfile 相同的目录中,并进行了以下更改(不广泛,这只是为了了解实际正在处理更改)

之前:

export function saveQuery(query) {
  const url = '/savedqueryviewapi/api/create';
  $.ajax({
    type: 'POST',
    url,
    data: query,
    success: () => notify.success(t('Your query was saved')),
    error: () => notify.error(t('Your query could not be saved')),
    dataType: 'json',
  });
  return { type: SAVE_QUERY };
}

之后:

export function saveQuery(query) {
  const url = '/savedqueryviewapi/api/create';
  $.ajax({
    type: 'POST',
    url,
    data: query,
    success: () => notify.success(t('Your query was saved and stored')),
    error: () => notify.error(t('Your query could not be saved')),
    dataType: 'json',
  });
  return { type: SAVE_QUERY };
}

如前所述,我尝试使用 docker COPY 命令复制代码,但这没有用。它在复制标准 HTML 文件时有效,但不是这些 JS 文件。

复制命令

COPY actions.js /usr/local/lib/python3.6/site-packages/superset/static/assets/src/SqlLab/actions.js

如果这有效,警报应该会更改,并且我对 JS 函数所做的任何其他更改都应该可见。

更新

解决方案可能在于将 nvm、node 和 npm 添加到我的 docker 文件中,以便监视我的 Javascript 文件的更改。

所以如果容器中的文件没有问题(正如你在上面的评论中所说的)并且你仍然无法在应用程序上看到更改,那么我只能想到一个可能的原因:您是否清除了缓存或 re-build 应用程序以便将其考虑在内?
检查实际 运行 应用程序的源代码,您将得到修复。

将以下行添加到我的 Dockerfile 中,将更改带到 前端

RUN apt-get update && apt-get install -y \
  nano \
  curl \
...
# Install nodejs for custom build
# https://superset.incubator.apache.org/installation.html#making-your-own-build
# https://nodejs.org/en/download/package-manager/

RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \
    && apt-get install -y nodejs

RUN cd ../usr/local/lib/python3.6/site-packages/superset/static/assets \
    && npm install \
    && npm ci \
    && npm run build \
    && rm -rf node_modules

据我了解,问题是我的 前端 的更改没有被编译。在构建中添加这些行会编译对 JS 或 JSX 文件所做的更改。

我通过查看此处的 Dockerfile 添加了这些附加内容:https://github.com/apache/incubator-superset/blob/master/contrib/docker/Dockerfile

我还必须添加 package.json 文件,因为存在的文件包含无效的包行。

COPY package.json /usr/local/lib/python3.6/site-packages/superset/static/assets/package.json