Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 网页包创作库导入错误,类型错误:xxx不是构造函数_Javascript_Webpack - Fatal编程技术网

Javascript 网页包创作库导入错误,类型错误:xxx不是构造函数

Javascript 网页包创作库导入错误,类型错误:xxx不是构造函数,javascript,webpack,Javascript,Webpack,将我编写(并发布到npm)的javascript包导入新项目时遇到问题 我创建了一个ES6包,并使用webpack将其打包。在包中,我可以使用脚本标记使用捆绑文件导入库 然后像这样重新开始上课: let awesomeTable=new awesomeTable.awesomeTable('record'); 工作起来很有魅力 我把这个包推到了npm,现在我想把它带到一个新项目中,就像这样: 从“@iannazzi/awesome table”导入AwesomeTable 然后 let aw

将我编写(并发布到npm)的javascript包导入新项目时遇到问题

我创建了一个ES6包,并使用
webpack
将其打包。在包中,我可以使用脚本标记使用捆绑文件导入库

然后像这样重新开始上课:

let awesomeTable=new awesomeTable.awesomeTable('record');

工作起来很有魅力

我把这个包推到了npm,现在我想把它带到一个新项目中,就像这样:

从“@iannazzi/awesome table”导入AwesomeTable

然后

let awesomeTable=新的awesomeTable('record')

这是错误的:
TypeError:\u iannazzi\u awesome\u表\u网页包\u导入的模块\u 0\u默认值。a不是构造函数

现在,我将它导入到一个新项目中,我尝试了各种新方法来升级这个类,但似乎完全卡住了

我可以通过再次包含脚本来使用包,但显然我想导入,以便重新打包:

以下是该软件包的网页包配置:

var path = require('path');
const ExtractTextPlugin = require("extract-text-webpack-plugin");

const SRC_DIR = path.resolve(__dirname,'../src');
const DIST_DIR = path.resolve(__dirname, '../dist');

module.exports = {
    entry: {
        app: SRC_DIR + '/table/AwesomeTable.js'
    },
    output: {
        path: DIST_DIR,
        filename: 'awesome-table-dist.js',
        library: 'AwesomeTable',
        // libraryTarget: 'window'
    },
    module: {
        rules: [
            {
                test: /\.scss$/,
                use: ["style-loader", "css-loader", "sass-loader"],
            },
        ],
    },
    plugins: [
        new ExtractTextPlugin('style.css')
        //if you want to pass in options, you can do so:
        //new ExtractTextPlugin({
        //  filename: 'style.css'
        //})
    ]
};

首先,您需要公开您的库,您可以通过定义&
libraryTarget:'umd'
properties来实现这一点

其次,不建议将lib作为捆绑包发布。考虑一下这个场景,您的lib由几个部分组成,但并非所有部分都是必需的。当您将lib打包发送时,您将强制用户下载多余的额外代码

目前的最佳实践是通过Babel传输代码,使其作为模块系统兼容
es5
commonjs

最近,有一种趋势是将es6模块放在一个单独的文件夹中,这样无论何时用户使用支持它的捆绑包,他们都可以使用它

我想我有它,
libraryTarget
需要是
umd
在包的网页配置中。。。对于回复,我确实通过添加libraryTarget使其工作。您在哪里阅读有关模块发布实践的信息?我好像被困在了网页包文档的一个部分谢谢!我认为我拥有的其实不是一个库——它是一段巨大的代码,所有的部分都是必需的。我已经创建了一个分布式捆绑包,可以用于在包中的浏览器中测试代码,现在可以使用
umd
标记来分发该文件。我在想,如果我的一个主要应用程序要使用它,最好只发送源文件夹——它不需要捆绑,因为该应用程序正在捆绑。听起来你在确认这个思维过程…为了完整性。。。以下是我一直关注的文档: