尝试将打字稿库与 webpack 捆绑时导出未定义

2024-03-21

我有一个正在用打字稿开发的库。我有通过 tsc 构建它以将其用作 npm 包的解决方案,但 tsc 单独翻译每个文件。我想使用 webpack 将所有内容创建在一个缩小的文件中,但它不起作用。我做了一些测试(使用 module.exports/require 在 JS 中创建了一个简单的包,它起作用了,一个使用 es6 语法导出/导入失败的 JS 包),所以我认为我来自 typescript 的导入/导出语法。但我期望加载程序(我尝试了 ts-loader 和 Awesome-ts-loader)来翻译它,但在每种情况下,当我尝试导入捆绑包时,它总是返回“未定义”。

这是我的 tsconfig.json 文件:

{
    "compilerOptions": {
        "declaration": true,
        "outDir": "./dist/",
        "sourceMap": true,
        "noImplicitAny": true,
        "module": "es6",
        "target": "es6",
        "resolveJsonModule": true,
        "moduleResolution": "node"
    },
    "exclude": [
        "node_modules"
    ]
}

(对于模块和目标,我尝试将模块和旧目标更改为 commonjs,但它没有改变任何东西......)

这是 webpack 配置文件:

const path = require('path');

module.exports = {
    entry: './src/index.ts',
    mode: 'production',
    module: {
        rules: [
            {
                test: /\.ts$/,
                use: 'ts-loader',
                exclude: '/node_modules/'
            }
        ]
    },
    resolve: {
        extensions: ['.ts']
    },
    output: {
        filename: 'index.js',
        path: path.resolve(__dirname, 'dist'),
        library: '',
        libraryTarget: 'commonjs2',
        libraryExport: 'default'
    }
};

和一个非常简单的 src/index.ts

export function foo() {
    console.log('this is foo');
}

但无法导入 foo 函数... 我在另一个项目中制作了一个测试文件。 我在库项目中使用“npm link”在全局模块中注册包,并在测试项目中使用“npm link @kalika-libraries/mixins”将其添加到node_modules中。 这是我所做的简单测试:

import * as foo from '@kalika-libraries/mixins';

console.log('foo', foo);

但它总是记录“未定义”......

我搜索了几个小时,尝试了不同的 tsconfigs 或 webpack 配置,但它总是相同的...导入有效的唯一情况是使用 tsc 时...但是查看一些库(例如 Angular)我知道捆绑库是可能的!我只是不知道该怎么做(也许我没有使用正确的工具......)。

哦,这是库的 package.json,以防万一:

{
    "name": "@kalika-libraries/mixins",
    "version": "1.0.0",
    "description": "Libraries to apply mixins on classes",
    "main": "dist/index.js",
    "types": "dist/index.d.ts",
    "scripts": {
        "build": "npx webpack"
    },
    "author": "Kalika",
    "license": "MIT",
    "devDependencies": {
        "@types/yeoman-generator": "^3.0.1",
        "codelyzer": "^5.0.0",
        "rxjs-tslint-rules": "^4.21.0",
        "ts-loader": "^5.3.3",
        "tslint-consistent-codestyle": "^1.15.1",
        "tslint-eslint-rules": "^5.4.0",
        "tslint-sonarts": "^1.9.0",
        "typescript": "^3.3.3",
        "vrsource-tslint-rules": "^6.0.0",
        "webpack": "^4.29.6",
        "webpack-cli": "^3.3.0"
    }
}

我在库文件夹中使用“npx webpack”命令来构建它。

因此,如果您有任何想法(希望您不会提出我已经尝试过的解决方案),我很乐意测试它!

thanks.


我面临着同样的问题。这为我解决了这个问题:

在 webpack.config.js 中:

output: {
  ...
  libraryTarget: 'umd',
  library: 'MyPackageName',
  ...
}

在 tsconfig.json 中:

compilerOptons: {
  ...
  "lib": ["es2015", "dom"],
  ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试将打字稿库与 webpack 捆绑时导出未定义 的相关文章

随机推荐