如何从AMD dojo创建构建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从AMD dojo创建构建相关的知识,希望对你有一定的参考价值。

Dojo对我来说很新,我有一些误解和缺乏知识。

我的应用程序(由其他人开发)使用AMD Dojo 1.8(相当旧,但让它保持原样)。在主jsp文件中,在加载应用程序时执行AMD的dojo.js。

我想创建一个构建。据我所知,我已创建图层并使用一些工具生成build - dojo.js文件将被创建(这是对的吗?)。我应该怎么做 - 用它替换现有的?如果是的话,我的意思是,AMD模块将如何加载?当我读到从AMD转向非AMD几乎是不可能的。

主要目标是优化应用程序,强制登陆页面加载更快。

答案

检查这个repository

它包含已配置的Dojo + Webpack + TypeScript的工作示例

一些关键点:

您需要配置DojoWebpackPlugin:

 new DojoWebpackPlugin({
      loaderConfig: require.resolve("./src/loader-config.js"),
      locales: ["de", "en"],
      environment: {
        dojoRoot: "/",
        production: env && env.production
      }, // used at run time for non-packed resources (e.g. blank.gif)
      buildEnvironment: { dojoRoot: "node_modules", build: true } 
    })

您必须使您的加载程序配置与dojo-webpack-plugin一起使用。

装载机-config.js:

function getConfig(env) {
  const loaderConfig = {
    parseOnLoad: false,
    tlmSiblingOfDojo: true,
    has: {
      "foreign-loader": true
    },
    isDebug: false,
    async: false,
    blankGif: "./assets/images/blank.gif",
    production: env.production,
    packages: [
      {
        name: "dojo",
        location: env.dojoRoot + "/dojo",
        lib: "."
      },
      {
        name: "dijit",
        location: env.dojoRoot + "/dijit",
        lib: "."
       }
     ]
  }

  if (!env.build) {
    loaderConfig.locale = dojoConfig.locale
  }

  return loaderConfig
}

//For build export function getConfig
if (typeof module !== "undefined" && module) {
  module.exports = getConfig
} else {
//To use it directly in index.html return config object
  getConfig({ dojoRoot: "/" })
}

我正在使用从npm安装的dojo,你也可以这样,而不是在./src文件夹中存储dojo文件。

在示例存储库中我使用TypeScript,因此如果要从TypeScript模块加载自己的AMD模块,则必须为它们创建定义。

希望这会有所帮助。如果您有任何问题可以在评论中随意提问,我会尝试更新我的答案。

以上是关于如何从AMD dojo创建构建的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Dojo AMD 中包含遗留模块

如何定义模块并在 AMD 的 dojo 中使用它?

如何在 post create dojo AMD 模块中调用按钮单击事件

dojo 1.7 AMD 框架有啥好处?

dojo js library + jsdoc -> 如何记录代码?

使用 Dojo AMD 加载程序加载 jQuery 问题