是否有一些解决方法可以使requireJS指向与alias捆绑在一起的webpack模块?

5us2dqdw  于 2022-11-13  发布在  Webpack
关注(0)|答案(1)|浏览(187)

以下是用于说明目的的伪配置文件:

网页包.配置

...
entry: {
    'animals': 'index' 
}
...

索引.js

import * as Wolfs from './path/to/dogs';
import * as Tigers from './path/to/cats';
export {
  Wolfs,
  Tigers
}

RequireJS的配置

require.config( {
    ...
    'paths': {
        'dogs-requireJS-moduleID' : './path/to/dogs',
        'cats-requireJS-moduleID' : './path/to/cats',
        'animals-webpack-bundle'  : 'path/to/animals/bundle'           
     },
    'map': {
        '*': {
            'dogs-requireJS-moduleID': 'animals-webpack-bundle',
            'cats-requireJS-moduleID': 'animals-webpack-bundle'
         }
   });

从属模块

import * as JohnDogs from 'dogs-requireJS-moduleID'; //This now points to animals-webpack-bundle 
JohnDogs.doStuff();

为了使Dependent模块工作,代码必须重写为JohnDogs.Wolfs.doStuff(),因为Dogs是用别名Wolfs导出的。我的问题是是否有一些变通方法可以使代码工作而不必重写它。
希望你已经很好地解释了我的问题。提前感谢。

更新

以上只是用于解释的伪代码。在我的真实的场景中,有其他项目拥有自己的webpack.config,它们依赖于我绑定的这个项目,但我无法访问它们。而且,这些项目共享我可以访问的相同RequireJS配置。

jm81lzqq

jm81lzqq1#

你不需要requireJS来创建别名。你可以在webpack中这样做(把这个片段插入你的webpack.config.js文件中)

const path = require("path");

/// ... webpack config
resolve: {
      extensions: [".ts", ".tsx", ".js", "jsx", ".json"],
      alias: {
        components: path.resolve(__dirname, "src/components/"),
        models: path.resolve(__dirname, "src/models/"),
        pages: path.resolve(__dirname, "src/pages/"),
        src: path.resolve(__dirname, "src/"),
      },
    },

请注意,如果您使用的是Typescript,您还需要在tsconfig.json中写入别名:

// ... compilerOptions
"paths": {
      "components/*": ["src/components/*"],
      "pages/*": ["src/pages/*"],
      "src/*": ["src/*"]
    },

然后,您可以导入如下所示的文件:

import Slider from "components/form/slider"

最后,别名应该指向一个入口点,比如componentsassets。不要像你的例子那样将它们指向特定的文件,否则你最终会有成千上万的条目,这是不可伸缩的。

相关问题