Как создать сборку из AMD Dojo - PullRequest
       22

Как создать сборку из AMD Dojo

0 голосов
/ 28 февраля 2019

Додзё для меня довольно новое, у меня есть недопонимание и недостаток знаний.

Мое приложение (разработанное кем-то другим) использует AMD Dojo 1.8 (довольно старое, но позволяет оставить все как есть).В основном jsp-файле dojo.js, который является AMD, выполняется при загрузке приложения.

Я хочу создать сборку.Как я понимаю, я создал слои и с помощью некоторых инструментов сгенерировал сборку - файл dojo.js был бы создан (это правильно?).Что мне с ним сделать - заменить существующий на него?Если да, что произойдет, я имею в виду, как будут загружаться модули AMD?Поскольку я читаю, переход с AMD на не-AMD практически невозможен.

Основная цель - оптимизировать приложение, заставить целевую страницу загружаться быстрее.

1 Ответ

0 голосов
/ 13 марта 2019

Отметьте это хранилище

Содержит рабочий пример настроенного 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.

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: "/" })
}

Я использую dojo, установленный из npm, вы также можете пойти по этому пути, вместо того, чтобы хранить файлы dojo в папке ./src.

В примере с репозиторием я использую TypeScript, так что есливы хотите загрузить собственные модули AMD из модулей TypeScript, вам нужно будет создать для них определения.

Надеюсь, это поможет.Если у вас есть какие-либо вопросы, не стесняйтесь задавать их в комментариях, я постараюсь обновить свой ответ.

...