【问题标题】:How to include/import an entire JS file with Webpack如何使用 Webpack 包含/导入整个 JS 文件
【发布时间】:2021-02-23 15:54:42
【问题描述】:

我是 Webpack 的新手,但我习惯于按以下方式构建我的 Web 应用程序:

  1. 为项目声明一个全局变量。
  2. 创建几个使用全局变量声明函数和变量的JS文件
  3. 将这些单独的js文件链接到HTML文件中,去生产的时候组合起来。

例如,我的第一个 JS 文件是“init.js”:

let FP = {}; // Global Object

我的第二个是“processing.js”:

FP.addNumbers = function(a, b){
  return a+b;
}

HTML 将包括:

 <script src="init.js"></script> 
 <script src="processing.js"></script> 

然后在生产中我使用我编写的节点插件来解析 HTML 页面并将所有 JS 文件合并为一个。

我想用 Webpack 做一些类似的事情,但我发现合并文件的唯一方法是使用“包含”。这要求每个文件使用单独的变量名。

我实际上只是想将我单独的 JS 文件的内容转储到 init.js 中。有没有办法做到这一点?

【问题讨论】:

    标签: javascript webpack ecmascript-6


    【解决方案1】:

    如果你打算使用 Webpack 来打包你的代码,正确的方法是利用模块化导入和导出来协调模块之间的数据,否则使用Webpack 并没有真正为您做任何事情。

    例如,在这里,尝试以下操作:

    // index.js
    import { addFns } from './addFns.js';
    
    const FP = {};
    window.FP = FP; // use this if the object needs to be global
    addFns(FP);
    
    // addFns.js
    export const addFns = (FP) => {
      FP.addNumbers = function(a, b){
        return a+b;
      }
    };
    

    然后,Webpack 可以自动创建仅包含一个 .js 文件作为输出的完整包,并且可以通过更多的后期处理为生产做好准备。

    【讨论】:

    • 我几乎得到了你的答案,但我应该提到我在 Wordpress 中使用 Gutenberg 并构建到他们的系统中,所以我并没有真正制作任何“全球”的东西,作为我的“FP”对象真的只是一个进口。话虽如此,使用您的语法我可以毫无错误地构建所有内容,但是“addFns.js”上的功能不可用。这是因为 FP 不是真正的全局对象吗?
    • 函数在哪里被调用?您是否有客户端 JS 在某处执行类似 FP.addNumbers(1, 2) 的操作?
    • 函数在“init.js”文件中调用。 “init.js”调用无法在其他文件中找到该函数。我是否需要以某种方式将它们包含在“FP”导出中?实际的“FP”变量不是全局变量,它实际上是一个 wordpress 导入的模块,所以一切都是自包含的。
    • 您需要导入依赖项 - 就像答案中的代码 import { addFns } from './addFns.js';
    • 我确实在 index.js 文件中添加了该代码,并且它构建时没有错误。但是,当我在浏览器中运行它时,代码失败并且控制台错误状态为“o.addNumbers is not defined”。由于某种原因,构建的缩小部分(wordpress 设置)似乎与“addNumbers”之前的 FP 变量不应该更改其名称有关。
    猜你喜欢
    • 2020-09-21
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    相关资源
    最近更新 更多