【问题标题】:How to build an npm package so it is able to be imported/required如何构建一个 npm 包,以便它能够被导入/需要
【发布时间】:2019-02-14 01:44:59
【问题描述】:

我已经构建了一个 npm 包并将其发布到 NPM。

当我 npm install <my-package> 然后 import MyPackage from "@Acme/MyPackage"; 进入反应时,我得到以下错误。

找不到模块:无法解析@Acme/MyPackage

这是因为我如何设置我的 sdk 包。你可以在下面找到我用来构建它的 webpack 配置。

顺便说一句,如果我直接在标题中导入脚本标记,这可以工作,但是如果没有在标题中专门定义脚本标记,我怎么能像这样导入它呢?

webpack.config.js

const path = require('path');
// const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = {
    entry: './src/index.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'my-package.min.js',
        libraryTarget: 'umd',
        library: 'MyPackage'
    },
    devtool: 'source-map',
    resolve: {
        extensions: ['.js'],
    },
    module: {
        rules: [
            {
                test: /\.(js)$/,
                use: 'babel-loader'
            }
        ]
    },
    node: {
        console: false,
        global: true,
        process: true,
        __filename: 'mock',
        __dirname: 'mock',
        Buffer: true,
        setImmediate: true,
        fs: 'empty',
        net: 'empty',
        tls: 'empty'

        // See "Other node core libraries" for additional options.
    },
    plugins: [
        // new UglifyJSPlugin({ sourceMap: true }),
        new CopyWebpackPlugin([
            { from: 'test/index.html', to: '' }
        ]),
    ],
};

【问题讨论】:

  • 您的包位于私有 NPM 注册表中 @Acme 对吗?它在node_modules 文件夹中吗?
  • @jerrylow 不,Acme 是一个命名空间,是的,我可以在 node_modules 中看到 min.js 文件
  • 你能分享这个包吗?

标签: javascript reactjs npm


【解决方案1】:

似乎import 不知道从哪里导入包,但由于它已经在你的node_modules 文件夹中,我猜你要么没有index.js 文件,要么你还没有为你的包定义你的主入口文件。

每个 NPM 包都会寻找一个 index.js 文件,但如果你想重命名它,你可以在你的 package.json 中定义它

{
  "name": "yourpackage",
  "version": "x.x.x",
  "main": "another-name.min.js",
}

【讨论】:

  • 顺便说一句,我认为这是问题所在,但如果不是,您必须在 webpack webpack.js.org/configuration/resolve 中解析包的路径
  • 谢谢你在将 main 指向我的 dist 文件后 webpack 输出它工作。
猜你喜欢
  • 2022-11-22
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 2018-07-29
  • 2021-02-25
  • 2022-01-24
相关资源
最近更新 更多