当前位置: 首页 > 知识库问答 >
问题:

使用Webpack和Typescript将模块暴露到全局Window对象

邵兴庆
2023-03-14

我正在使用webpack处理和捆绑我的TypeScript模块,但我需要一些模块/块从外部可用。我该怎么做?

其他信息

代码被分成不同的目录,每个页面(/component)一个目录。每个页面都包含几个文件,每个文件都包含一个模块。它看起来像这样:

 js/
  ├ page1/
  | ├ entry.ts
  | ├ module1.ts
  | └ module2.ts
  ├ page2/
  | ├ entry.ts
  | ├ module3.ts
  | └ module4.ts  

类型脚本模块的定义如下

import {Module2} from "./module2";
export module Module1 {

    export function someFunc():int {
        return Module2.someVal;
    }

}

我正在使用gulp-webpack来编译和捆绑每个页面的模块:

gulp.task('javascript', function () {
    return gulp.src('src/js/**/entry.ts')
        .pipe(named(function (file) {
            // Sets file.named to the containing directory name (used by webpack)
            return path.dirname(file.path).substr(path.dirname(file.path).replace(/\\/g, '/').lastIndexOf('/') + 1);
        }))
        .pipe(webpack({
            resolve: {
                extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js']
            },
            module: {
                loaders: [
                    {test: /\.tsx?$/, loader: 'ts-loader'}
                ]
            },
            plugins: [
                new CommonsChunkPlugin({
                    name: "bundle",
                    minChunks: 3
                })
            ],
            output: {
                filename: '[name].js'
            },
            devtool: 'source-map'
        }))
        .pipe(gulp.dest('dest/js'))
});

现在我需要从全局范围访问 Module1.someFunc(),以便它可以被其他(外部)组件使用。我已经查看了暴露加载程序,但我不明白在这种情况下如何工作。

任何帮助都将不胜感激!

共有1个答案

松雅健
2023-03-14

无论如何,我想出了如何使用暴露加载器来做到这一点。在条目中,我使用了:

import x = require("expose-loader?M1!./module1");

这使得该功能可通过 M1 使用。Module1.someFunc() 从外部。我的IDE和gulp-webpack都抛出了一个错误,但最终它仍然以某种方式工作。对我来说足够好了!

 类似资料:
  • 既然我们对模块模式已经有一些了解了,让我们看一下改进版本 - Christian Heilmann 的启发式模块模式。 启发式模块模式来自于,当Heilmann对这样一个现状的不满,即当我们想要在一个公有方法中调用另外一个公有方法,或者访问公有变量的时候,我们不得不重复主对象的名称。他也不喜欢模块模式中,当想要将某个成员变成公共成员时,修改文字标记的做法。 因此他工作的结果就是一个更新的模式,在这

  • 我有以下文件: 我希望这个'app'变量是全局可访问的,因为其他文件是这样使用它的: 在webpack.config.js中,我有以下一行: 我想不出我错过了什么。我的app.js格式不正确吗?为什么仍然不能全局使用?

  • 问题内容: 我不会将jQuery对象公开给浏览器中开发人员控制台内部可访问的全局窗口对象。现在在我的webpack配置中,有以下几行: 这些行将jQuery定义添加到我的webpack模块中的每个文件中。但是,当我构建项目并尝试在开发者控制台中访问jQuery时,如下所示: 它说这些属性是不确定的… 有没有办法来解决这个问题? 问题答案: 您需要使用expose-loader.。 您可以在需要时执

  • Exposing models over REST(将模型暴露给REST) 简介 REST 路径 使用 REST 路由 请求数据格式化 使用HTTP查询字符串传递JSON对象或数组 响应数据格式化 禁用 API Explorer 预定义的远程方法(remote methods) 暴露/隐藏 models, 方法, 端点(endpoints) 隐藏的方法和REST端点 案例: 只读端点(endpoi

  • 使用sping-data-rest公开存储库我想覆盖默认的异常处理。 阅读文档在我看来,最好的wat应该是使用@ControllerAdvice注释类 有几点我不太清楚: 我应该扩展ResponseEntityExceptionHandler,其他类,什么都不扩展吗 顺便说一句,即使我尝试了不同的配置,这似乎也不起作用。有没有办法在spring data rest中自定义错误处理?

  • 问题内容: 我正在尝试将一个非常基础的项目与React,TypeScript和Webpack整合在一起。编译时,我从以下位置的文件夹中收到以下错误(为了简便起见,我删除了堆栈跟踪和项目路径): 我尝试卸载TypeScript并将其替换为Babel来转换JSX,并得到了相同的错误。 安装固定好了。 我已经尝试过的每一个组合,并在得到的打字稿同样的结果,但无法得到任何工作。 如何使Webpack,Ty