我想使用節點js作爲反應原生項目的後端。我們可以在反應本機應用程序中使用nodejs代碼嗎?
回答
是的你可以通過使用ReactNativify爲Big Rich正確地使用爲Node編寫的包。 有些事情要考慮,雖然:
1)我跟着我的問題列表中找到的建議和2份分手transformer.js
:
transformers.js(在/config
和rn-cli.config.js
調用):
const babelTransformer = require('./babel-transformer');
module.exports.transform = function(src, filename, options) {
const extension = String(filename.slice(filename.lastIndexOf('.')));
let result;
try {
result = babelTransformer(src, filename);
} catch (e) {
throw new Error(e);
return;
}
return {
ast: result.ast,
code: result.code,
map: result.map,
filename
};
};
巴貝爾-transformer.js(也在/config
):
'use strict'
const babel = require('babel-core');
/**
* This is your `.babelrc` equivalent.
*/
const babelRC = {
presets: ['react-native'],
plugins: [
// The following plugin will rewrite imports. Reimplementations of node
// libraries such as `assert`, `buffer`, etc. will be picked up
// automatically by the React Native packager. All other built-in node
// libraries get rewritten to their browserify counterpart.
[require('babel-plugin-rewrite-require'), {
aliases: {
constants: 'constants-browserify',
crypto: 'react-native-crypto',
dns: 'mock/dns',
domain: 'domain-browser',
fs: 'mock/empty',
http: 'stream-http',
https: 'https-browserify',
net: 'mock/net',
os: 'os-browserify/browser',
path: 'path-browserify',
pbkdf2: 'react-native-pbkdf2-shim',
process: 'process/browser',
querystring: 'querystring-es3',
stream: 'stream-browserify',
_stream_duplex: 'readable-stream/duplex',
_stream_passthrough: 'readable-stream/passthrough',
_stream_readable: 'readable-stream/readable',
_stream_transform: 'readable-stream/transform',
_stream_writable: 'readable-stream/writable',
sys: 'util',
timers: 'timers-browserify',
tls: 'mock/tls',
tty: 'tty-browserify',
vm: 'vm-browserify',
zlib: 'browserify-zlib'
},
throwForNonStringLiteral: true
}],
// Instead of the above you could also do the rewriting like this:
["module-resolver", {
"alias": {
"mock": "./config/mock",
"sodium-universal": "libsodium"
}
}]
]
};
module.exports = (src, filename) => {
const babelConfig = Object.assign({}, babelRC, {
filename,
sourceFileName: filename
});
const result = babel.transform(src, babelConfig);
return {
ast: result.ast,
code: result.code,
map: result.map,
filename
};
}
2)正如你在上面的代碼中看到的,我也使用了babel-plugin-module-resolver
。
注意,我將使用此插件而不是一個ReactNative使用。它可以讓你引用本地文件,並用適當的引號書面允許像非JS兼容的名字「鈉鹽萬能」
注2或去.babelrc
解決方案(也許乾淨)如本意見所列:https://github.com/philikon/ReactNativify/issues/4#issuecomment-312136794
3)我發現我仍然需要在我的項目的根目錄中使用.babelrc
以使我的Jest測試正常工作。有關詳細信息,請參閱此問題:https://github.com/philikon/ReactNativify/issues/8
PS我試圖將端口綁定到Node上,因此我現在正在研究一種不同的方法:[將NodeJS編譯爲Android上的本機庫](https://stackoverflow.com/q/ 45459909/8295283) –
非常有幫助的總結,謝謝。 –
@ArnoldSchrijver謝謝你的總結,我試着採用你的方法,但我得到'錯誤:捆綁失敗:TypeError:無法在transform.js中讀取undefined'屬性'slice'。特別是'const extension = String(filename.slice(filename.lastIndexOf('。')));' 任何原因爲什麼? –
- 1. 我們可以在web2py應用程序代碼中使用java代碼嗎?
- 2. 我們是否可以共享反應web應用程序和原生應用程序之間的代碼,並且可以作出反應 - 本機生產
- 3. 我們可以在iOS應用程序中使用gSOAP庫嗎?
- 4. 我們可以在angularjs應用程序中使用event.preventDefault()嗎?
- 5. 我們可以在android應用程序中使用UIAutomator嗎?
- 6. 使用「反應本機」與我們現有的代碼
- 7. 我可以在Java應用程序中集成android代碼嗎?
- 8. 我們可以在本機iPhone應用程序中實現openID選項嗎?
- 9. 可以確保我的反應本機應用程序免受MITM攻擊嗎?
- 10. 我們可以使用ASP.NET Core應用程序中的Microsoft.AspNet.WebApi.Client嗎?
- 11. 我們可以在J2EE應用程序上使用WSRP portlet嗎?
- 12. 我們可以在html中爲android應用程序製作應用程序嗎?
- 13. 我們可以用「反應路由器」在本機應用程序,以及用於路由目的是什麼?
- 14. 是否可以從本機應用程序調用Java代碼?
- 15. 我們可以在SWING代碼中使用JAVAFX代碼嗎?
- 16. StackNavigator在反應本機應用程序
- 17. 可以在我的應用程序中使用Apple的示例代碼嗎?
- 18. 我們可以在iPhone應用程序中集成Flash嗎?
- 19. 我們可以在Mac Cocoa應用程序中有彈出嗎?
- 20. 我們可以使用SIRI作爲應用程序中的文本語音嗎?
- 21. 我可以在我發佈的應用程序中使用Microsoft Windows手機教程代碼嗎?
- 22. 我可以/應該在cordova應用程序中下載html5代碼嗎?
- 23. 我可以在非nodejs應用程序中使用swagger測試模板嗎?
- 24. 我可以在我們的VC++應用程序中使用Windows授權嗎?
- 25. 我可以從PHP調用nodejs應用程序嗎?
- 26. 我們可以使用運行gnome的機器開發kde應用程序嗎?
- 27. 我們可以在Android和iOS應用程序中使用Square Checkout流程嗎?
- 28. 創建反應本機應用程序 - 使用本機模塊
- 29. 我可以在反應原生文本中使用blockquote嗎?
- 30. 在反應本機應用程序中使用auth0 SDK
如果您想要構建WebService,則可以執行所有操作,因爲您的應用程序及其後端將通過http進行通信... – Hitmands
感謝您的回覆,請查看此鏈接(http: //www.w3resource.com/node.js/nodejs-sqlite.php)我想要完全一樣的,但在原生反應。 –
我不想爲Web服務使用單獨的代碼,我想在反應原生項目中使用節點js代碼。所以有可能? –