2017-01-02 3 views
1

Я пытаюсь создать 2 отдельные сборки, используя rollup.js: application.js и dependencies.js, содержащий код моего приложения и код общей библиотеки (react, react-dom и т. Д.) Соответственно.Внешние зависимости неверно связаны в rollup.js?

Документы говорят, что я должен иметь возможность просто использовать externals: ['react', 'react-dom'] и заставить его работать, но когда я проверяю полученный пакет, я все равно заканчиваю работу с полным объемом обеих библиотек. Вот мой пример app.config.js, который я вызываю с помощью rollup -c app.config.js:

Что я делаю неправильно?

import babel  from 'rollup-plugin-babel' 
import commonjs from 'rollup-plugin-commonjs' 
import nodeResolve from 'rollup-plugin-node-resolve' 
import replace  from 'rollup-plugin-replace' 
import uglify  from 'rollup-plugin-uglify' 
import { keys } from 'lodash'  

const PRODUCTION = (process.env.NODE_ENV || 'development') === 'production' 
const ENVIRONMENT = JSON.stringify(PRODUCTION ? 'production' : 'development') 

const EXTERNALS = { 
    'react': 'React', 
    'react-dom': 'ReactDOM', 
} 

const plugins = [ 
    replace({ 'process.env.NODE_ENV': ENVIRONMENT }), 
    babel({ 
    babelrc: false, 
    exclude: ['node_modules/**', '**/*.json'], 
    presets: ['es2015-rollup', 'react'], 
    }), 
    commonjs({ 
    ignoreGlobal: false, 
    include: ['node_modules/**'], 
    }), 
    nodeResolve({ 
    browser: true, 
    jsnext: true, 
    main: true, 
    preferBuiltins: false, 
    }), 
] 

if (PRODUCTION) { 
    plugins.push(uglify()) 
} 

export default { 
    entry: 'source/application.js', 
    exports: 'none', 
    external: keys(EXTERNALS), 
    globals: EXTERNALS, 
    plugins, 
    targets: [{ 
    dest: 'build/js/application.js', 
    format: 'iife', 
    sourceMap: !PRODUCTION, 
    sourceMapFile: '/js/application.js', 
    }], 
    treeshake: true, 
} 
+0

попробуйте использовать webpack .. я нахожу это намного проще –

ответ

1

Ответ, который я нашел в том, чтобы включить дополнительный аргумент для вызова rollup-plugin-node-resolve плагина следующим образом:

nodeResolve({ 
    ignoreGlobal: false, 
    include: ['node_modules/**'], 
    skip: keys(EXTERNALS), // <<-- skip: ['react', 'react-dom'] 
}), 

Это, по-видимому нужно, так что rollup-plugin-node-resolve плагина знает skip импортируя эти внешние зависимости, когда другие node_modules включили библиотеки, импортирующие их.

например: import someReactLib from 'some-react-lib' который использует import React from 'react'. Без языка skip это, похоже, приводит к потянув React к общему комплекту.