2016-07-15 2 views
3

Я пытаюсь создать библиотеку umd с webpack; независимо от того, что я получаю предупреждение:Webpack UMD: критическая зависимость ... не может быть статически извлечена

WARNING in D:/Code/Node/sample.io/source/index.ts 3:24 Critical dependency: require function is used in a way in which dependencies cannot be statically extracted

, когда я пытаюсь require('./index.js') сгенерированный index.js я получаю:

Error: Cannot find module "."

Для полноты здесь все мои файлы:

webpack.config.js:

module.exports = { 
    entry: { 
    index: __dirname + '/index' 
    }, 
    output: { 
    filename: 'index.js', 
    library: 'mylib', 
    libraryTarget: 'umd', 
    umdNamedDefine: true 
    }, 
    resolve: { 
    root: __dirname, 
    extensions: ['', '.ts', '.js'], 
    }, 
    module: { 
    loaders: [ 
     { test: /\.ts$/, loaders: ['awesome-typescript-loader'] } 
    ]  
    } 
} 

tsconfig.json:

{ 
    "compilerOptions": { 
    "target": "es5", 
    "module": "umd" 
    }, 
    "exclude": [ 
    "node_modules" 
    ] 
} 

package.json:

{ 
    "name": "foo", 
    "version": "0.1.0", 
    "devDependencies": { 
    "awesome-typescript-loader": "^2.0.2", 
    "typescript": "^2.0.0", 
    "webpack": "^2.1.0-beta.17" 
    } 
} 

index.ts:

export function MyFunc(params) { 
    console.log("hello world"); 
} 
  • node -v = v6.3.0
  • npm -v = 3.7.5

странно, мой друг говорит, что это работает без ошибок для них. Хотя он находится на node 4.2.6. Если я изменю модуль на commonjs, он отлично работает без предупреждений или ошибок.

ответ

10

Я думаю, что вам нужно "module": "commonjs" в TSconfig так машинописный сборник будет испускать модули, которые понятны WebPack, вы все равно получите UMD выхода из WebPack

Надеются, что это помогает

+0

Удивительно, я застрял в своем мнении, что для вывода UMD требуется ts. спасибо: D –

+4

Что делать, если это не ваше репо? – amcdnl

+0

Что делать, если мне нужно импортировать модуль UMM npm? – zixia

1

Если вы не можете изменить module от umd до commonjs, потому что вы просто потребляете его, и у вас нет доступа к источнику, вы можете использовать umd-compat-loader в качестве обходного пути. Добавьте следующий rule к вашему webpack.config.js:

module: { 
    rules: [ 
     // other rules come here. 
     { 
      test: /node_modules[\\|/](name-of-the-umd-package)/, 
      use: { loader: 'umd-compat-loader' } 
     } 
    ] 
}, 

Я добавил несколько деталей к этому thread.