从 requirejs 迁移到 webpack
Migrating from requirejs to webpack
我是 migrating/moving 一个基于 require.js 到 webpack v3 的项目。由于我所有的模块都使用以下语法:
define([modules,..], function(mod1,..)
其中声明使用哪些模块,并将模块赋值给匿名函数中的变量。自 webpack v2 以来,这似乎已被弃用。我找不到任何关于此的信息(web pack v1 的文档除外)。
我应该将所有模块重写为 commonjs(包括依赖项)还是有任何聪明的方法来使用 AMD 模块?
帮助非常感谢:-)
问候
AMD 在 requirejs 之外从未发现太多用途,因此您可能需要转换。有一些工具可以提供帮助:
- https://github.com/anodynos/uRequire 可以从 AMD -> UMD / CommonJS 转换代码
有来自 (https://github.com/anodynos/uRequire/wiki/nodejs-Template) 的注意事项:
- 路径的运行时转换,例如 models/PersonModel 到 ../../models/PersonModel,具体取决于从何处调用。你仍然会得到构建时翻译的 bundleRelative 路径,到他们的 nodejs fileRelative 等价物。
对于大多数项目来说,这不是问题。
- 不能使用 require(['dep'], function(dep){...}) 的异步版本
您应该可以使用require 的同步版本。如果使用 webpack2,你可以使用 System.import
或 require.ensure
- 不能 运行 需要 js 加载器插件,例如文本!...或 json!...
你会发现所有这些插件的 webpack 版本
- 没有 / 的映射,即 webRootMap 等或使用 requirejs.config 的 {baseUrl:"...."} 或 {paths:"lib":"../.. /lib"}
这可以用 https://www.npmjs.com/package/babel-plugin-module-alias
复制
CaptEmulation 的回答对较新的 Webpack 版本无效。 Webpack 原生支持 AMD(既不需要额外的加载器,也不需要安装插件)。此处提供了详尽的说明:https://webpack.js.org/api/module-methods.
当有人试图将 RequireJS-based 构建重写为 Webpack 时,这一事实可能很容易被忽视,因为 RequireJS 使用没有尾随 ./
的相对路径,例如
define('app/dep1', function(dep1) { ... });
在没有额外配置的情况下不会传入Webpack(假设require.config.js
和webpack.config.js
都在同一个目录):
{
resolve: {
modules: [ './', ... ] // other entries possible here
}
}
我是 migrating/moving 一个基于 require.js 到 webpack v3 的项目。由于我所有的模块都使用以下语法:
define([modules,..], function(mod1,..)
其中声明使用哪些模块,并将模块赋值给匿名函数中的变量。自 webpack v2 以来,这似乎已被弃用。我找不到任何关于此的信息(web pack v1 的文档除外)。
我应该将所有模块重写为 commonjs(包括依赖项)还是有任何聪明的方法来使用 AMD 模块?
帮助非常感谢:-) 问候
AMD 在 requirejs 之外从未发现太多用途,因此您可能需要转换。有一些工具可以提供帮助:
- https://github.com/anodynos/uRequire 可以从 AMD -> UMD / CommonJS 转换代码
有来自 (https://github.com/anodynos/uRequire/wiki/nodejs-Template) 的注意事项:
- 路径的运行时转换,例如 models/PersonModel 到 ../../models/PersonModel,具体取决于从何处调用。你仍然会得到构建时翻译的 bundleRelative 路径,到他们的 nodejs fileRelative 等价物。
对于大多数项目来说,这不是问题。
- 不能使用 require(['dep'], function(dep){...}) 的异步版本
您应该可以使用require 的同步版本。如果使用 webpack2,你可以使用 System.import
或 require.ensure
- 不能 运行 需要 js 加载器插件,例如文本!...或 json!...
你会发现所有这些插件的 webpack 版本
- 没有 / 的映射,即 webRootMap 等或使用 requirejs.config 的 {baseUrl:"...."} 或 {paths:"lib":"../.. /lib"}
这可以用 https://www.npmjs.com/package/babel-plugin-module-alias
复制CaptEmulation 的回答对较新的 Webpack 版本无效。 Webpack 原生支持 AMD(既不需要额外的加载器,也不需要安装插件)。此处提供了详尽的说明:https://webpack.js.org/api/module-methods.
当有人试图将 RequireJS-based 构建重写为 Webpack 时,这一事实可能很容易被忽视,因为 RequireJS 使用没有尾随 ./
的相对路径,例如
define('app/dep1', function(dep1) { ... });
在没有额外配置的情况下不会传入Webpack(假设require.config.js
和webpack.config.js
都在同一个目录):
{
resolve: {
modules: [ './', ... ] // other entries possible here
}
}