代码之家  ›  专栏  ›  技术社区  ›  baris1892

Symfony 4:其他JS文件中的Webpack Encore-call方法

  •  4
  • baris1892  · 技术社区  · 6 年前

    我想在十分钟内打电话 index.js app.js .但我明白了错误 app.test is not a function .从我的 webpack.config.js :

    Encore
        .addEntry('app', './assets/js/app.js')
        .addEntry('index', './assets/js/index.js')
        .setOutputPath('public/build/')
        .createSharedEntry('vendor', [
           './assets/js/vendor/jquery-3.2.1.slim.min.js'
        ])
       .autoProvideVariables({
           $: 'jquery',
           jQuery: 'jquery',
           'window.jQuery': 'jquery'
       });
    

    应用程序。js 只包含 test 方法:

    function test() {
        return "test123";
    }
    

    指数js 尝试调用此方法:

    let app = require("./app");
    
    $(document).ready(function () {
        console.log(app); // empty object {}
        console.log(app.test());
    });
    

    这个设置有什么问题?我是否误解了webpack的概念?我认为有可能需要所需的模块,并像上面的例子那样访问它们。

    1 回复  |  直到 6 年前
        1
  •  7
  •   Iwan Wijaya    6 年前

    首先,您的模块是相关的,所以您应该只使用1个js条目。移除你的 app.js 报关进口 webpack.config.js . 下一步在你的应用中。js,导出你的函数

    function test() {
        return "test123";
    }
    
    module.exports = {
        test
    };
    

    在你的索引中。js

    let app = require("./app");
    
    $(document).ready(function () {
        app.test()
    });
    

    或者使用ESM模块的替代方法:

    应用程序。js

    export function test() {
        return "test123";
    }
    

    指数js

    import { test } from './app';
    
    $(document).ready(function () {
        test();
    });