2017-10-04 84 views
0

我試圖讓彙總,commonjs,es6和樹木搖晃正常工作。彙總CommonJS,進口和出口與樹木搖擺

目前,我有以下構建腳本:

'use strict'; 

const rollup = require('rollup'); 
const resolve = require('rollup-plugin-node-resolve'); 
const commonjs = require('rollup-plugin-commonjs'); 

rollup.rollup({ 
    input: 'main.js', 
    format: 'iife', 
    plugins: [ 
    { 
     transform(code, id) { 
     return code; 
     } 
    }, 
    resolve({ 
     extensions: ['.js', '.jsx'] 
    }), 
    commonjs({ 
     extensions: ['.js', '.jsx'] 
    }) 
    ] 
}) 
.then(({ generate }) => generate({ 
    format: 'iife', 
    name: 'test', 
})) 
.then(({ code }) => console.log(code)); 

它加載以下main.js文件

const { firstFunction } = require('./exports'); 

firstFunction(); 

export.js文件

export function firstFunction() { 
    return this.name; 
} 

export function secondFunction() { 
    return this.name; 
} 

輸出以下:

var test = (function() { 
'use strict'; 

function firstFunction$1() { 
    return this.name; 
} 

function secondFunction() { 
    return this.name; 
} 


var exports$1 = Object.freeze({ 
    firstFunction: firstFunction$1, 
    secondFunction: secondFunction 
}); 

var require$$0 = (exports$1 && undefined) || exports$1; 

const { firstFunction } = require$$0; 

firstFunction(); 

var main = { 

}; 

return main; 

}()); 

我不能確定這是否是正確的行爲,我是假設,我將能夠使用樹搖動與ES6 export.js文件,因此不需要導入從export.jssecondFunction()我們捆綁在一起的代碼。

我已經嘗試了一些設置的組合,但似乎沒有任何東西能夠讓樹形發揮作用。

這是值得注意的,我在服務器上使用commonjs並試圖使用客戶端上捆綁的相同文件 - 這就是爲什麼我有混合的cjs和es6。

+0

使用導入而不是要求如果可能 – Lux

+0

@Lux我需要使用commonjs for main.js,因爲它在節點上運行。 – Prisoner

+0

如果你在'export.js'中使用'export'(假設缺少's'是一個錯字),這是沒有意義的。你也可以輸入'import'。彙總的整個想法是刪除所有的「輸入」,並用一個單一的IIFE(或任何你想要的)替換它們。 – Lux

回答

1

正如勒克斯在評論中所述,問題在於你在混合cjs和ES模塊。看起來rollup-plugin-commonjs不樹木造成進口。

您應該首先將您的文件與彙總打包並使用cjs作爲輸出格式。然後您可以使用require捆綁。

這應該讓你的JavaScript樹形圖並準備好節點。

+0

正如我在其他評論中提到的,我在服務器上使用commonjs,我想與客戶端共享這段代碼(這是一個用jsx編寫的視圖文件)。如果我們說100%沒有辦法讓commonjs變成treehake,那麼我會看看其他解決方案,但是cjs在es6命名的導出文件中需要這個事實 - 我認爲它會起作用。 – Prisoner

+0

我不太喜歡你。你不能把'main.js'中的'require'改成'import'嗎? – destoryer

+0

沒有。因爲那麼節點將無法運行它。 es6命名的輸出在節點中不可用。 – Prisoner