【问题标题】:Webpack require ensure large modulesWebpack 需要确保大模块
【发布时间】:2018-01-22 17:11:54
【问题描述】:

我正在使用 d3 库。它相当大,所以我只想按需下载块。我可以使用 require.ensure 创建拆分点,但我不知道如何将库实际纳入模块范围。这是我能得到的最接近的,块已下载,但 d3 始终未定义。任何帮助将不胜感激。

var React = require('react');
var d3;

require.ensure([], function(require){

    d3 = require('d3');

});

var Chart = React.createClass({
    render: function() {
        var props = this.props;
        var width = props.width;

        //d3 is undefined here
        var xScale = d3.scale.linear().domain([
            0, 111
        ]).range([
            0, width
        ]);

        return (
            <g>
            </g>
        );
    }
});

module.exports = Chart;

【问题讨论】:

    标签: node.js webpack


    【解决方案1】:

    据我了解,机制是这样的:

    require.ensure(["<file-path or module name>"], function(moduleExportsValue) {
        var myModule = require("<file-path or module name>");
    });
    

    对于您的具体示例:

    require.ensure(["d3"], function() {
        var d3 = require("d3");
        // do something with d3
    });
    

    编辑:对于在应用程序中不立即可见的内容非常有用。例如对话框、模态框、叠加层。

    onButtonClick: function(event) {
        this.showLoader();
    
        var self = this;
        require.ensure("path/to/dialog", function() {
            self.hideLoader();
    
            var dialog = require("path/to/dialog");
            dialog.open();
        });
    },
    

    【讨论】:

    • 嗨 - 这也行吗? require(['d3'], function(obj) { var d3 = obj;})here
    • 嗨 - 正常的 require 函数会立即加载依赖项。使用require.ensure(['d3'], function() { var d3 = require('d3'); })。如果 d3 有一个 module.exports 语句,您可以像这样使用它:require.ensure(['d3'], function(d3) { console.log( d3 ); }) ... 来异步加载依赖项。
    猜你喜欢
    • 2018-08-26
    • 2019-09-04
    • 1970-01-01
    • 2014-06-15
    • 2015-07-27
    • 2016-06-21
    • 2017-03-28
    • 2020-03-02
    • 2019-11-10
    相关资源
    最近更新 更多