我試圖使用webpack + babel-loader,它使我的構建器項目與我的應用程序源項目保持獨立。帶有babel-loader的Webpack:使用構建項目之外的入口點
本質:
/builder-project/build.js
/app-project/app.js
在build.js
:
var webpack = require('webpack');
var compiler = webpack({
entry : './../app/app.js',
output : {
filename : 'out.js'
},
bail : true,
module: {
loaders: [
{
test: /\.jsx?$/,
exclude: /(node_modules|bower_components)/,
loader: 'babel-loader',
query: {
presets: ['es2015']
}
}
]
}
});
compiler.run(function(err, stats) {
console.log(err);
});
而且app.js
包含基本ES6模塊。
正在運行build.js
我無法擺脫Couldn't find preset "es2015" relative to directory [absolute-path-on-my-machine]/app-project
。所以基本上它是尋找支持babel-loader的npm模塊相對於我的入口點的路徑,而不是構建腳本。
我已經嘗試過在的WebPack配置context
和resolve
收杆,但似乎無法的WebPack /巴貝爾,裝載機的東西相對不加載到我的入口點。對我來說,保持庫路徑相對於構建腳本而不是入口點會更有意義,但也許事情不是這樣設計的?
UPDATE
所以從@nils下面的答案肯定是解決眼前的問題。但是,第二個包含的模塊中又出現了同樣的問題。我不包括它的源代碼之上,但一看:
app.js
:
import Factory from './../../vendor/factory-project/factory.js';
var App = Factory.define({
//...
});
export default App;
的factory-project
文件夾初始化npm
並具有node_modules
。當我運行構建時,儘管加載器現在可以在app.js
上正常工作,但它在處理其中的import
時會引發與以前相同的錯誤:Couldn't find preset "es2015" relative to directory [some-path-on-my-machine]/factory-project
。它看起來像即使在答案中使用resolveLoader
時,它似乎被忽略時包括從npm
初始化的項目文件夾中的文件。
更新2
有一個已知的bug導致此。有關解決方法,請參閱下面的答案。
哈,好的,所以你的解決方案確實有幫助,謝謝。然而它比這更復雜。在我的'app.js'中,我有一個'import',用於在另一個項目中引用另一個模塊,'從./../../ other-project/module.js''導入otherModule。因爲'other-project'中有一個'node_modules',所以現在我得到的是相對於該目錄下目錄錯誤的「無法找到預設」es2015「。似乎'resolveLoader'正在被覆蓋。任何進一步的想法,非常感謝! – Dan
只需做到明確:當您不包含另一個項目中的其他模塊時它是否工作?無論哪種方式,假設你只運行一個webpack實例,包括來自另一個項目的文件不應該成爲問題。你確定'path.resolve(__ dirname,'node_modules')'指向正確的目錄嗎?試試'console.log'。 – nils
當我沒有在'app.js'中包含其他模塊時,它工作正常,所以'resolveLoader'路徑是正確的(技術上我的原始問題已被回答)。但奇怪的是,從已用'npm'初始化的外部目錄導入模塊似乎再次破壞了一切。 – Dan