javascript - 如何从使用 webpack 构建的 VanillaJS 库公开对象?

标签 javascript webpack

我正在开发一个 Vanilla JS 库。该库必须公开一个对象,我们称之为 sdk:该对象将包含所有库方法,因此潜在用户可以执行此操作

<script src="thelibrary.js"></script>
<script>
   sdk.myFunction();
</script>

这是我的 webpack 配置:

const path = require('path');

module.exports = {
  entry:
    ['babel-polyfill', './src/index.js'],
  output: {
    path: path.join(__dirname, './dist'),
    filename: 'my-sdk.js',
    library: 'my-sdk-function',
    libraryTarget: 'umd',
    publicPath: '/dist/',
    umdNamedDefine: true,
  },
  mode: 'production',
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /(node_modules|bower_components)/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: ['env', 'react', 'es2015', 'stage-0'],
          },
        },
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader'],
      },
      {
        test: /\.less$/,
        use: ['style-loader', 'css-loader', {
          loader: 'less-loader',
          options: {
            javascriptEnabled: true,
          },
        }],
      },
    ],
  },
};

这是我的index.js

const myFunction = () => { 
   console.log('hello'); 
}
const sdk = { myFunction };

我怎样才能实现我的目标?

我有一个 index.html 文件,我通过 python SimpleHTTPServer 提供服务:

<body>
  <script src="http://localhost:5000/dist/my-sdk.js"></script>
</body>

但是我无法访问 sdk 对象...我的错误是什么?

非常感谢!

最佳答案

简短回答 - 您正在寻找:

output: {                                                                                                                                                                          
  library: {                                                                                                                                                                       
    type: "window",                                                                                                                                                                
  },                                                                                                                                                                               
},

随着 webpack.config.js 包含该内容,我的 sdk 对象可在 window 上使用 - 正如您在问题中所述。

长答案 - 这与多年前编写 js 库的方式非常相似。它现在仍然可以是一个有效的用例,但可以使现代项目中的人员远离您的图书馆。我的目标是构建至少 2 个文件:

  1. 标准输出,通过 wepback 或其他现代工具导入
  2. 正如您在问题中所述,全局范围内的污染

我正在尝试的存储库在这里: https://github.com/marcin-wosinek/webpack-sdk

其工作原理的示例如下: https://marcin-wosinek.github.io/webpack-sdk/

关于javascript - 如何从使用 webpack 构建的 VanillaJS 库公开对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68182304/

相关文章:

javascript - 按属性对对象数组进行排序(多级)

javascript - react 路由器 : How to change path URL when redirect to a component by typing path?

javascript - ES6 Webpack 相对导入 - 找不到模块 : Error: Cannot resolve module

JavaScript ES6 导入/导出和类扩展

javascript - 在 Javascript 中将大十进制数转换为字符串

javascript - 使用 CanJS,当实例被销毁时,如何自动从 Model.List 中删除模型实例?

webpack - 在与 webpack-dev-server 相同的端口上提供任意资源

reactjs - ES6 无法在 Webpack 中导入 JSX 模块

Webpack stats.json 文件为空

带有构造函数的 Javascript 子方法/命名空间