如何从AMD Dojo创建构建

时间:2019-02-28 06:28:48

标签: optimization build dojo amd

Dojo对我来说还很陌生,我有些误会和缺乏知识。

我的应用程序(由其他人开发)使用AMD Dojo 1.8(虽然比较旧,但请保留原样)。 在主jsp文件dojo.js中,它是AMD在加载应用程序时执行的。

我想创建一个构建。据我了解,我已经创建了图层,并使用一些工具生成了build-将创建dojo.js文件(对吗?)。我该怎么办-用它替换现有的?如果是的话,我的意思是,如何装载AMD模块?正如我读到的那样,几乎不可能从AMD迁移到非AMD。

主要目标是优化应用程序,迫使登录页面加载更快。

1 个答案:

答案 0 :(得分:1)

选中此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一起使用。

loader-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,您也可以采用这种方式,而不是将dojo文件存储在./src文件夹中。

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

希望这会有所帮助。如果您有任何问题随时发表评论,我将尝试更新答案。