代码之家  ›  专栏  ›  技术社区  ›  Apolo

Web包重新处理的动态导入

  •  0
  • Apolo  · 技术社区  · 5 年前

    我想做一个JS库来播放视频。 我从Dailymotion和JWPlayer开始。

    根据用户想要播放的内容,我希望动态加载dailymotion或jwPlayer sdk。

    对于Dailymotion,我从CDN请求他们的SDK,这样我就可以在运行时添加一个脚本标记,很好。

    对于JWPLayer,我拥有所有的javascript,但是我希望它位于单独的块中,所以我使用动态导入。

    在我的输出目录中有:

    • main.bundle.js包
    • jwplayer.chunk.js文件

    webpack.config.js网站 :

    const path = require('path');
    
    const buildConfig = require('./build.config.js');
    const srcDir = path.resolve(__dirname, 'src');
    
    module.exports = {
      entry: {
        CorePlayer: path.resolve(srcDir, 'CorePlayer'),
      },
      output: {
        path: path.resolve(__dirname, buildConfig.outDirectory),
        filename: '[name].js',
        chunkFilename: 'internal/_[name].js',
        libraryTarget: 'commonjs2',
      },
      resolve: {
        extensions: ['.js', '.jsx'],
        alias: {
          '@utils': path.resolve(__dirname, 'src/utils'),
          '@lib': path.resolve(__dirname, 'lib'),
          '~': path.resolve(__dirname, 'src'),
        },
      },
      module: {
        rules: [
          {
            test: /\.js$/,
            exclude: /node_modules/,
            use: 'babel-loader',
          }
        ],
      },
    };
    

    巴贝尔 :

    {
      "plugins": [
        "@babel/plugin-transform-runtime",
        "@babel/plugin-syntax-dynamic-import",
        "@babel/plugin-proposal-class-properties"
      ],
      "presets": [
        [
          "@babel/preset-env",
          {
            "modules": false,
            "loose": true,
            "shippedProposals": true
          }
        ]
      ],
      "env": {
        "test": {
          "presets": ["@babel/preset-env"]
        }
      }
    }
    

    现在我正试图从另一个项目中请求我的库作为模块:

    import myPlayer from 'my-player';
    

    myPlayer 是由 main.bundle.js 将成为这个项目的一部分。

    但是当我想使用jwplayer显示视频时,我会得到一个错误404,找不到jwplayer.chunk.js

    我不知道该如何解决这个问题,有没有办法在重新处理库时保留动态导入?

    0 回复  |  直到 5 年前