Webpack重新捆绑动态导入

时间:2019-01-04 11:12:26

标签: javascript webpack

我正在尝试制作一个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',
      }
    ],
  },
};

.babelrc

{
  "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';

myPlayermain.bundle.js导出的内容,将成为该项目捆绑包的一部分。

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

我不知道如何解决此问题,在重新打包我的库时是否可以保留动态导入?

0 个答案:

没有答案